Не работает req.on('data', () =>{}) на nodejs
Вот простейший код на ноде, стоит 16.13.0 LTS версия:
const { createServer } = require('http');
const PORT = 3000;
const server = createServer((req, res) => {
let body = '';
req.on('data', (chunk) => {
body = chunk.toString();
});
req.on('end', () => {
const parsedBody = JSON.parse(body);
console.log('Parsed body', parsedBody);
const propsCount = Object.keys(parsedBody).length;
console.log('Props count', propsCount);
res.writeHead(
200,
{
'Content-type': 'text/plain'
}
)
.end(`Body from request has been succesfully accepted and parsed. It has ${propsCount} props`);
});
});
server.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Через Postman отправляю POST запрос с массивом в JSON формате:
{
"dsad": "string data",
"prid": true,
"prdop3": "1337"
}
Приходит ошибка следующая:
undefined:1
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
Перед parsedBody вставлял console.log(body), чтобы взглянуть что там в переменной, а там пусто и соответсвенно такая ошибка. Не работает именно та часть, где идет обработка req.on('data', (chunk) , я не понимаю в чем проблема, помогите пж.
Ответы (2 шт):
У меня в chunk ничего не было из-за того, что инпутам формы не дал name. Но форма отправлялась стандартным способом html.
body = chunk.toString();
Во-первых, за это надо руки отрывать. Не все же в США живут.
Во-вторых, предполагалось +=, а не =.
А правильно делать так:
var chunks = []
request.on('data', chunk => chunks.push(chunk))
request.on('end', () => {
var body = Buffer.concat(chunks) + ""
Но форма отправлялась стандартным способом html.
html вообще не отправляет формы в json, насколько я помню.