body-синтаксический анализатор игнорирует параметр типа

#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 не является операцией, поэтому он игнорировался.