Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 August 14

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Ага, ну в gulp часто запись идет через pipe, таким образом создаются цепочки задач.
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
pipe это общее понятие оно и в линуксе есть, просто реализации разные
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
req и res это стримы. По идее должно получиться просто запайпать. Не нужно вычитывать данные.

Возможно придется еще status code руками поставить.
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
долгое время я понятие халява не связывал с программированием)
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Вот так я написал:
'use strict';

const http = require('http');

const hostname = process.env.HOST || '0.0.0.0';
const port = process.env.PORT || 5000;

const server = http.createServer(async (req, res) => {
 res.statusCode = 200;
 req.pipe(res);
 res.end();
});

server.listen(port, hostname, () => {
 console.log(`Server running at http://${hostname}:${port}/`);
});

То выдается ошибка: write after end.  Но если я удаляю res.end(); то кажется все работает.
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
👍
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
Почитайте что такое streams в nodejs.
Дока https://nodejs.org/api/stream.html

Хороше объяснение принципов https://github.com/substack/stream-handbook
источник

H

Hesus in NodeUA - JavaScript and Node.js in Ukraine
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Да, я читал, вроде разбирался в стримах, но видать не до конца.
Вот так работает:
'use strict';

const http = require('http');

const hostname = process.env.HOST || '0.0.0.0';
const port = process.env.PORT || 5000;

const server = http.createServer(async (req, res) => {
 res.statusCode = 200;
 req.pipe(res);
});

server.listen(port, hostname, () => {
 console.log(`Server running at http://${hostname}:${port}/`);
});

В ответе приходит JSON с телом запроса, но без заголовков, так что это не совсем то, что требовалось.
источник

H

Hesus in NodeUA - JavaScript and Node.js in Ukraine
с чего ты взял что там будут заголовки
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
опять 25)
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
Скопируйте заголовки руками
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Обычно запрос содержит заголовки, поэтому я думал их увидеть.
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
лучше наверно сначала доки почитать
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
Если что, пример echo server есть на офф сайте, и его уже вроде кидали
https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/#echo-server-example
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Вот эти записи одинаковые?

const server = http.createServer((request, response) => {
});


const server = http.createServer();
server.on('request', (request, response) => {
});
источник

H

Hesus in NodeUA - JavaScript and Node.js in Ukraine
да
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
Почитайте доку https://nodejs.org/dist/latest-v16.x/docs/api/http.html#http_http_createserver_options_requestlistener

The requestListener is a function which is automatically added to the 'request' event
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Сейчас как-раз читаю и попутно спрашиваю, спасибо.
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Начал смотреть исходники модуля http, а там тайпсрипт который я не знаю. Получается, что все равно нужно знать тайпскрипт, чтобы разобраться...
источник