workshopper-browser-guide
Version:
Create an html browser version of the exercise descriptions
40 lines (25 loc) • 3.72 kB
Markdown
Реализуйте HTTP сервер, который отдает одинаковый файл для всех входящих запросов.
Сервер должен слушать порт, который будет передан в качестве первого аргумента командной строки.
Файл, который нужно возвращать будет передан в качестве второго аргумента командной строки. Вы **должны** использовать `fs.createReadStream()` метод для отдачи содержимого файла.
----------------------------------------------------------------------
## ИНФОРМАЦИЯ
В связи с тем, что в этом задании нам нужно создать HTTP сервер, а не низкоуровневый TCP сервер, то мы должны использовать встроенный `http` модуль Node. Так же как и `net` модуль, `http` имеет метод `http.createServer()`, но в этом случае он создает сервер, который может общаться по HTTP.
`http.createServer()` принимает функцию, которая будет вызвана один раз для каждого соединения к серверу. Она имеет следующую сигнатуру:
```js
function callback (request, response) { /* ... */ }
```
где два аргумента это объекты, представляющие HTTP запрос и соответствующий ответ на этот запрос. `request` используется для получения таких свойств запроса, как заголовок или строка-зпроса, в то время, как `response` нужен для отправки данных клиенту, как заголовков, так и тела ответа.
Оба `request` и `response` являются потоками Node! Это значит что Вы может как посылать, так и принимать потоки данных, если это подходит для Вашего случая.
`http.createServer` возвращает экземпляр Вашего сервера. Вы должны вызвать `server.listen(portNumber)` для того чтобы стартовать сервер на заданом порту.
Типичный Node HTTP сервер выглядит так:
```js
var http = require('http')
var server = http.createServer(function (req, res) {
// обработка запросов
})
server.listen(8000)
```
Документацию для `http` модуля вы сможете найти набрав в браузере:
{rootdir:/node_apidoc/http.html}
Встроенный модуль `fs` также имеет потоквые API для файлов. Вы должны использовать метод `fs.createReadStream()` для создания потока представляющий файл, который Вы получите в качестве аргумента командной строки. Этот метод возвращает потоковый объект (stream) который Вы можете использовать как `src.pipe(dst)` для того чтобы направить данные из потока `str` в поток `dst`. В нашем случае вы можете связать поток файловой системы с потоком HTTP.
----------------------------------------------------------------------