GithubHelp home page GithubHelp logo

part-1-task-3's Introduction

##Домашняя работа №3

###Express

Express — фреймфорк для написания веб-приложений на платформе Node.js. В основе работы Express лежит паттерн middleware.

###Middleware

Middleware — функция, имеющая доступ к объекту запроса req, объекту ответа res и следующей функции next в цикле обработки запроса/ответа в приложении.

Middleware-функции могут выполнять такие задачи:

  • Выполнять любой код
  • Изменять объекты запроса req и ответа res
  • Заканчивать цикл обработки запроса/ответа
  • Вызывать следующую middleware-функцию в стэке

###Задание

Условия

  1. Нельзя исользовать дополнительные внешние модули, например cookie-parser
  2. Для успешно сдачи нужно чтобы проходили базовые тесты, проверять npm test

####Реализуйте набор middleware-функций

  • Middleware авторизации. Она должна проверять значение авторизационной куки (authorize), в случае если оно неизвестно или отсутствует — отдавать 403 ошибку. Если значение известно — передавать следующую функцию в стэке middleware. Например, если пришли кука "authorize": "random authorize string", то считаем, что пользователь авторизован, а если кука вообще не пришла или пришла как пустая строка, то нет

  • Middleware логирования времени исполнения. Замеряет время работы в миллисекундах (до тысячных) всех остальных middleware в стэке, логирует это время в консоль, и устанавливает хедер со временем работы X-Time. Например, по результатам работы, сервер должен ответить заголовком X-Time: 112.432

  • Middleware логирования запросов. Логирует в консоль все урлы и методы вызовов к веб-приложению, устанавливает в ответ хедер X-Request-Url Например, если был вызван метод GET для урла /apiUrl, то должен установиться заголовок X-Request-Url: "GET /apiUrl"

  • Middleware обработки ошибок. Обрабатывает все ошибки, произошедшие в предыдущих middleware, так же обрабатывает все некорректные запросы к серверу, выводит их в консоль console.error и возвращает пустой ответ с хедером X-Request-Error: "error message" Если был некорректный вызов API, например GET /incorrect (без /v1/), то возвращать ошибку X-Request-Error: "Unknown request"

####Реализуйте трансформирующий поток

Реализуйте два трансформирующих потока которые принимают строку и производят транслитерацию:

  1. Ожидает строку на русском, делает прямую (из кириллических символов в латинские) трансформацию
  2. Ожидает строку на английском, делает обратную (из латинских символов в кириллические) трансформацию

Правила транслитерации:

Кириллица Латиница
А A
Б B
В V
Г G
Д D
Е E
Ё Jo
Ж Zh
З Z
И I
Й J
К K
Л L
М M
Н N
О O
П P
Р R
С S
Т T
У U
Ф F
Х H
Ц C
Ч Ch
Ш Sh
Щ Shh
Ъ #
Ы Y
Ь '
Э Je
Ю Ju
Я Ja

Считаем что заглавные и прописные буквы кодируются одинаково, вам в помощь translit.ru

####Реализуйте веб-приложение

Реализуйте с помощью Express веб-приложение которое предоставляет доступ к файловой системе. Приложение должно использовать все middleware из предыдущего задания и на лету производить транслитерацию. При старте приложение должно монтироваться к какой-либо директории на локальной файловой системе.

Если полученный URL ссылается на директорию, нужно отдать список файлов в директории. URL указывается относительно текущей дериктории

> GET /v1/files/ HTTP/1.1
> Host: example.com
> Cookie: <auth_cookie>
>
< HTTP/1.1 200 OK
< Content-Type: application/json;charset=UTF-8
< Content-Length: 36
< Last-Modified: Fri, 23 Sep 2016 12:56:44 GMT
<
< {"content": [".", "..", "file.txt"]}

Если полученный URL ссылается на файл, нужно отдать JSON с транслитерированным содержимым файла. Язык файла мы определяем по первому определяемому символу, по которому можно определить язык. Например, для файла "12asd" - первые символы латинские, производим обратную транслитерацию. В случае, если используются кириллические символы, нужно провести прямую транслитерацию; в случае если латинские — обратную. В иных случаях нужно ответить ошибкой.

> GET /v1/files/file.txt HTTP/1.1
> Host: example.com
> Cookie: <auth_cookie>
>
< HTTP/1.1 200 OK
< Content-Type: application/json;charset=UTF-8
< Content-Length: 21
< Last-Modified: Fri, 23 Sep 2016 12:56:44 GMT
<
< {"content": "Privet"}

####Задания со звездочкой*

  • Расширьте приложение возможностью монтироваться не только к локальной файловой системе, но и к удаленным FTP- и WebDAV-серверам. Напишите в комментарии к коду небольшую инструкцию как переключаться, как пользоваться и как проверить что возвращаются нужные файлы. Если нужно будет светить логин-пароль, то можете завести фейковый аккаунт
  • Реализуйте трансформирующий поток, осуществляющий преобразование бинарных данных в Base64. Напишите небольшую инструкцию в коде как запустить данный трансформирующий поток вместо транслитерационного.

Дополнительно

Чтобы успешно сделать задание:

  • нужно сделать не менее 10 коммитов в пулреквесте
  • тесты будут дополняться, сейчас только базовые тесты, не забывайте обновляться от исходного репозитория. Если вы написали код верно, то он будет работать, при изменении тестов, т.к. тесты тестируют функциональность, описанную в задании, они нужны только для вспомогательной цели.

part-1-task-3's People

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.