Я пишу приватный плагин для nodebb (открытый форум программного обеспечения). В файле веб-сервера nodebb. js есть строка, которая, похоже, включает все входящие данные json.
app.use(bodyParser.json(jsonOpts));
Я пытаюсь преобразовать все входящие данные json для одной из моих конечных точек в необработанные данные. Однако проблема в том, что я не могу удалить или изменить строку выше.
Следующий код работает ТОЛЬКО если я временно удаляю строку выше.
var rawBodySaver = function (req, res, buf, encoding) {
if (buf && buf.length) {
req.rawBody = buf.toString(encoding || 'utf8');
}
}
app.use(bodyParser.json({ verify: rawBodySaver }));
Однако, как только я вставляю промежуточное ПО app.use(bodyParser.json(jsonOpts));
обратно в файл веб-сервера. js он останавливается за работой. Таким образом, похоже, что body-parser обрабатывает только первый анализатор, который соответствует входящему типу данных, а затем пропускает все остальные?
Как я могу обойти это? Я не смог найти никакой информации в их официальной документации.
Любая помощь с благодарностью.
** Обновление **
Проблема, которую я пытаюсь решить, заключается в правильной обработке входящего события чередования полос. В официальной документации полосы они предложили мне сделать следующее:
// Match the raw body to content type application/json
app.post('/webhook', bodyParser.raw({type: 'application/json'}),
(request, response) => {
const sig = request.headers['stripe-signature'];
let event;
try {
event = stripe.webhooks.constructEvent(request.body, sig,
endpointSecret);
} catch (err) {
return response.status(400).send(Webhook Error:
${err.message});
}
Оба метода, оригинал в верхней части этого поста и рекомендованный путь официальной полосы, правильно строят событие полосы, но только если я удаляю промежуточное программное обеспечение в веб-сервере. Теперь я понимаю, что у вас не может быть нескольких промежуточных программ для обработки одних и тех же входящих данных. У меня мало места для маневра, когда дело доходит до первого промежуточного программного обеспечения, за исключением возможности изменить аргумент (jsonOpts), который ему передается и приходит из файла. json. Я попытался добавить поле проверки, но я не мог понять, как добавить функцию в качестве значения. Я надеюсь, что это имеет смысл, и извините за то, что не указали, какую проблему я пытаюсь решить изначально.