Пишем первую программу на Node.js

29 июля, 2017 года

Напишем простое сетевое приложение которое будет возвращать исходный код самого себя.

Версия №1.

Создадим файл server.js:

// server.js
const fs = require('fs');
const http = require('http');

const server = http.createServer((req, res) => {
    const headers = {'Content-Type': 'text/plain; charset=utf-8'};
    // __filename содержит абсолютный путь к js-файлу скрипта.
    fs.readFile(__filename, 'utf8', (err, data) => {
        if (err) {
            res.writeHead(500, headers);
            res.end(http.STATUS_CODES[500]);
        } else {
            res.writeHead(200, headers);
            res.end(data);
        }
    });
    // $ PORT=8000 node server.js
}).listen(process.env.PORT || 3000, () => {
    const address = server.address().address;
    const port = server.address().port;
    console.log(`Server running at http://${address}:${port}`);
});

Запускаем приложение в терминале $ node server.js.
Открываем в браузере ссылку на страницу http://localhost:3000.

Версия №2.

В новой версии задействуем стримы, создадим поток для чтения и через канал свяжем его с ответом сервера.

const fs = require('fs');
const http = require('http');

const server = http.createServer((req, res) => {
    const headers = {'Content-Type': 'text/plain; charset=utf-8'};

    // __filename содержит абсолютный путь к js-файлу скрипта.
    const readStream = fs.createReadStream(__filename, 'utf8');
    readStream
        .on('open', () => {
            res.writeHead(200, headers);
            // res.end() будет вызван автоматически.
        })
        .on('error', () => {
            // Что-то пошло не так, ответим ошибкой.
            res.writeHead(500, headers);
            res.end(http.STATUS_CODES[500]);
        })
        .pipe(res);

    // $ PORT=8000 node server.js
}).listen(process.env.PORT || 3000, () => {
    const address = server.address().address;
    const port = server.address().port;
    console.log(`Server running at http://${address}:${port}`);
});