2016-01-21 4 views
4

Я пытаюсь написать простой экспресс-сервер, который принимает входящий JSON (POST), анализирует JSON и присваивает тело запроса. Уловка я не могу использовать bodyparser. Ниже мой сервер с простой функцией промежуточного программного обеспечения передается в app.useРазбор JSON в Express без BodyParser

Проблема: всякий раз, когда я отправляю фиктивные POST-запросы на свой сервер с суперагент (пакет npm, который позволяет отправлять JSON через терминал), мой сервер отключается. Я написал HTTP-сервер аналогичным образом, используя req.on ('data') ... поэтому я в тупике. Любой совет?

const express = require('express'); 
const app = express(); 

function jsonParser(req, res, next) { 
    res.writeHead(200, {'Content-Type:':'application/json'}); 
    req.on('data', (data, err) => { 
    if (err) res.status(404).send({error: "invalid json"}); 
    req.body = JSON.parse(data); 
    }); 
    next(); 
}; 

app.use(jsonParser); 
app.post('/', (req, res) => { 
    console.log('post request logging message...'); 
}); 

app.listen(3000,() => console.log('Server running on port 3000')); 

ответ

16

Я думаю, что проблема как получить rawBody в экспресс.

Так же, как это:

app.use(function(req, res, next){ 
    var data = ""; 
    req.on('data', function(chunk){ data += chunk}) 
    req.on('end', function(){ 
     req.rawBody = data; 
     req.jsonBody = JSON.parse(data); 
     next(); 
    }) 
}) 

И вам нужно поймать ошибку, когда разобрать строку JSON и нужно судить Content-type из Req.

Удачи.

+0

По какой-то странной причине JSON.parse бросает исключение, потому что данные пусты в конце, но если я его поймаю, req.rawBody получит текст JSON позже. – Michael

Смежные вопросы