Express:阻止bodyParser解析请求

BJP*_*rim 3 json node.js express

我正在使用 Nodejs + Express 版本 4.14.0,如下所示:

var app = express();
var bodyParser = require('body-parser')
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
    extended: true
}));
Run Code Online (Sandbox Code Playgroud)

这是必需的并且按预期工作。但是,对于某些请求,我想强制应用程序不自动将请求解析为 json,而是将其保留为纯文本,即:

app.post('/myRequest', function (req.asPlainText(), res) {
    // req is not parsed to json now
});
Run Code Online (Sandbox Code Playgroud)

有谁知道我怎样才能实现这一目标?

Eva*_*cas 5

您可以传递一个字符串作为第一个参数app.use(),它只会将中间件应用于匹配的路径。该文档可以在http://expressjs.com/en/4x/api.html#app.use找到。

一个例子:

app.use('/', bodyParser.json())
Run Code Online (Sandbox Code Playgroud)

您还可以在将 body-parser 添加为全局中间件之前声明任何不需要 body-parser 的路由,但通常最好只在实际需要 body 的地方使用 body-parser。

如果你不想为每个路由使用 app.use() ,你也可以在路由声明中传递中间件,如下所示:

app.post('/', bodyParser.json(), function(req, res) {
  // handle route here
})
Run Code Online (Sandbox Code Playgroud)

要不将其用于某些路线,只需不要将其包含在路线中即可。