Я написал промежуточное ПО Express для извлечения необработанного тела запроса и установил его перед body-parser. промежуточное ПО.
Мое пользовательское промежуточное ПО вызывает req.setEncoding('utf8')
, но это вызывает следующую ошибку анализатора тела:
Ошибка: не следует задавать кодировку потока
at readStream (/node_modules/body-parser/node_modules/raw-body/index.js:211:17) at getRawBody (/node_modules/body-parser/node_modules/raw-body/index.js:106:12) at read (/node_modules/body-parser/lib/read.js:76:3) at jsonParser (/node_modules/body-parser/lib/types/json.js:127:5)
Вот мой код:
var express = require('express');
var bodyParser = require('body-parser')
function myMiddleware() {
return function(req, res, next) {
req.rawBody = '';
req.setEncoding('utf8');
req.on('data', function(chunk) {
req.rawBody += chunk;
});
req.on('end', function() {
next();
});
}
}
var app = express();
app.use(myMiddleware());
app.use(bodyParser.json());
var listener = app.listen(3000, function() {
});
app.get('/webhook/', function (req, res) {
res.sendStatus(200);
});
Есть ли способ сбросить кодировку? Есть ли другой способ получить необработанное тело, но после него использовать body-parser?
res.sendStatu(200);
. - person doublesharp   schedule 16.11.2016setEncoding()
, я думал, что мне тоже нужно, потому что без этого приложение зависает. Теперь я понимаю, что тот, кто попытается прочитать тело во второй раз, будет зависать, в данном случае body-parser. - person kiewic   schedule 16.11.2016next()
не вызывается до тех пор, покаend
не будет передано данным. Попробуйте просто установить обработчики событий, а затем вызватьnext()
в конце, не в обработчике. - person doublesharp   schedule 16.11.2016myMiddleware
никогда не вызывается, поэтому next никогда не вызывается. - person doublesharp   schedule 16.11.2016