#node.js #express #mime-types #content-type #body-parser
#node.js #выразить #mime-типы #тип содержимого #body-parser
Вопрос:
У меня есть входящие запросы Content-Type: application/vnd.surveymonkey.response.v1 json
. Я пытаюсь использовать body-parser
их. В документации для body-parser
json
заводского метода указано:
Возвращает промежуточное программное обеспечение, которое анализирует только json и просматривает запросы только в тех случаях, когда заголовок Content-Type соответствует параметру type .
[…]
Параметр type используется для определения типа носителя, который будет обрабатываться промежуточным программным обеспечением. Этот параметр может быть строкой, массивом строк или функцией. Если это не функция, параметр type передается непосредственно в библиотеку type-is, и это может быть имя расширения (например, json), mime-тип (например, application/json) или mime-тип с подстановочным знаком (например, / или */json). Если функция, параметр типа вызывается как fn(req), и запрос анализируется, если он возвращает истинное значение. По умолчанию используется application/json.
Я пробовал различные параметры, но независимо от того, что я ввел, промежуточное программное обеспечение синтаксического анализатора продолжает принимать application/json
, отклоняя application/vnd.surveymonkey.response.v1 json
. Фактически, когда я помещаю console.debug
оператор в type
функцию, он никогда не печатается, поэтому похоже type
, что аргумент полностью игнорируется.
Я делаю что-то не так? что мне нужно сделать для body-parser
соблюдения type
параметра?
import * as bodyParser from 'body-parser';
import * as express from 'express';
const app = express();
app.use(
bodyParser.json({
// type: 'application/vnd.surveymonkey.response.v1 json', // doesn't work
// type: ['application/vnd.surveymonkey.response.v1 json'], // doesn't work
// type: ['application/*'], // doesn't work
// type: (req) => /application/(. )?json/.test(req.headers['Content-Type'] as string), // doesn't work
type: (req) => console.debug('Hello world!'),
})
);
app.post(`/`, (req, res) => {
console.log('Request: ', req.body);
res.status(200).send();
});
Ответ №1:
Оказывается, проблема заключалась в том, что я работал с функциями Firebase, которые уже выполняются body-parser
при входящих запросах. Добавление другого экземпляра body-parser
не является операцией, поэтому он игнорировался.