Express正文解析器同时支持Content-Type'text / plain'和'application / json'

时间:2019-07-18 02:46:32

标签: node.js express body-parser

router.post('/action', bodyParser.text(), async (req, res) => {
  try {
    body = JSON.parse(req.body);
    // ...
    res.send('ok');
  } catch (e) {
    res.send('not ok');
  }
});

我可以为Content-Type: 'text/plain'使用上面的代码,而对于Content-Type: 'application/json'为下面的代码,但是现在我需要同时支持它们,如何? bodyParser中是否有一个选项同时支持“文本/纯文本”和“应用程序/ json”?

router.post('/action', bodyParser.json(), async (req, res) => {
  try {
    body = req.body;
    // ...
    res.send('ok');
  } catch (e) {
    res.send('not ok');
  }
});

1 个答案:

答案 0 :(得分:0)

没关系,我想通了:

router.post('/action', bodyParser.text({
  type: ['json', 'text']
}), async function(req, res) {
  try {
    body = typeof req.body === 'string' ? JSON.parse(req.body) : req.body;
    // ...
    res.send('ok');
  } catch (e) {
    res.send('not ok');
  }
});