Проблема с обработкой запроса post в Node
Отправляю из сайта post запрос, он доходит возвращает статус код 200, дальше мне нужно данные отправленные при запросе записать в файл.
if (request.method == 'POST') {
let body = ''
request.on('data', chunk =>{
body += chunk.toString()
})
request.on('end', () => {
let params = parse(body)
console.log(params)
let fs = require('fs')
fs.writeFileSync('Newdata.json',params)
response.end('post')
})
}
Такой алгоритм не работает, сегодня начал учить ноду так что буду рад помощи.
запрос
axios.post('http://localhost:3001',{name:'superhero', age: 18}).then(response => (console.log(response)));
выводит в консоль [Object: nill prototype]{ '{{"name":"superhero", "age": 18}}':''} и достать данные не получаеться.
С сервером я не работал много, дальше мне нужно будет брать данные из этого файла так что можете и тут помочь))
Ответы (1 шт):
Можете ли вы подробнее описать, что вам нужно сделать и какой результат хотите получить? Просто у меня после попытки написать тот же код, что и у вас получается следующее:
- На сервер приходит POST запрос.
- Считывается
bodyв обработчикеdata. - В
endобработчике парсится string в javascript объект. - Javascript объект синхронно пишется в файл (что, не очень хорошо, лучше использовать асинхронную реализацию).
res.endвозвращает строкуpostкак результат запроса.
Что касается console.log в axios.post(...).then(), то у меня выводится прямо полное тело ответа. Для того, чтобы получить конкретно данные (то, что отправлено в res.end), нужно брать response.data. Но опять же, по вопросу непонятно, что именно вы хотите возвращать как response POST запроса.
Ну и еще пара замечаний по коду:
Как заметили в комментариях,
requireлучше всегда делать в начале файла. И один раз.Для
paramsможно спокойно использоватьconstвместоlet, так как они не изменяются.Ну и да, классика: всегда используйте тройное равенство (https://habr.com/ru/post/138272/) - одна из множества статей, в которой объясняется, почему.