request.on (читаемый) вызывается дважды для одного запроса в nodejs - PullRequest
0 голосов
/ 07 декабря 2018

Я новичок в nodejs, и сейчас я учусь http-модулю.

Я написал js-программу для узла, чтобы проверить, является ли тип контента application / json в запросе, тогда он должен утешитьв «читаемом» событии.

Что происходит: при одном запросе «читаемое» событие вызывается дважды и печатает значение в первый раз и во второй раз, когда возвращается ноль.

ЗдесьКод:

var connect = require('connect');


function jsonParse(req, res, next) {
    if (req.headers['content-type'] == 'application/json' && req.method == 'POST') {
        var readData = '';
        req.on('readable', function() {
            console.log('inside readable ' + req.read());
            readData += req.read();
        });

        req.on('end', function() {
            try {
                req.body = JSON.parse(readData);
            } catch (e) {
            }   
            next();
        })
    } else {
        next();
    }
}

connect()
.use(jsonParse)
.use(function(req, res) {
    if (req.body) {
        res.end('JSON parsed !' + req.body);
    } else {
        res.end('no json detected !');  
    }
}).listen(3000);

Я называю это так: enter image description here

вывод: внутри читаемый {"foo": "asdf"} внутриreadable null

Пожалуйста, сообщите мне, как я могу справиться с этим.Заранее спасибо.

1 Ответ

0 голосов
/ 17 декабря 2018

Вы должны читать из запроса только при наличии данных, поэтому, когда req.read() не возвращает null.Вы можете проверить это с помощью петли while.

Заменить:

var readData = '';
req.on('readable', function() {
    console.log('inside readable ' + req.read());
    readData += req.read();
});

На:

var readData = '';
req.on('readable', function(){
    var chunk;
    while (null !== (chunk = req.read())){
        readData += chunk;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...