Express app body解析器不适用于某些api.s

时间:2017-02-21 05:54:13

标签: javascript node.js express twilio

所以我有一个快速的应用程序,我一直在构建一个使用身体解析器的应用程序,该解析器适用于我的整个应用程序客户端。 (接收发布后的数据)

app.use(bodyParser.json());似乎会导致apis问题,这就是我评论它的原因。既然我不使用它,我无法从我的网站收到帖子数据..我该怎么办才能使api和我的网站有效?

// APP
var app = express();
//app.use(bodyParser.json()); //ISSUE: this is breaks API post //but i need it to recieve MY post req data

app.use(bodyParser.urlencoded({ extended: true }));
app.use(fileUpload());


app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

2 个答案:

答案 0 :(得分:0)

一个简单的方法是在激活bodyParser中间件之前定义twilio使用的路由。如果不知道为什么身体传感器会阻止twilio工作,这是我能做的最好的事情。

答案 1 :(得分:0)

在generell中,我总是建议不要为所有后续路由注册身体解析器全局,而是直接在路由上注册,或者只在本地为一个需要它的路由器(路径前缀)注册。

在为所有后续路由注册bodyParser之前移动twilio的路由器也会起作用,但它的可维护性较差。

因此,如果您需要在特定路线上输入json数据,请按以下方式编写:

app.post('/some/route', bodyParser.json(), (req, res, next) => {
   // processing of your json
});

我建议这样做的原因是,因为提交给服务器的正文是作为流提供的。每当您注册一个将处理正文的中间件时,它将消耗整个内容,并且您不能使用任何其他中间件也将在此之后处理正文。仅将其用于需要此解析器的路径可消除此问题,并允许您根据路径使用不同的主体解析器。

您的项目越大,您越有可能遇到需要其他身体解析器的情况,那么您很可能会在移动路线时不再有效。