【问题标题】:Express: Prevent bodyParser from parsing requestExpress:阻止bodyParser解析请求
【发布时间】:2021-08-25 23:46:11
【问题描述】:

我正在使用 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
}));

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

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

有谁知道我如何做到这一点?

【问题讨论】:

    标签: json node.js express


    【解决方案1】:

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

    一个例子:

    app.use('/', bodyParser.json())
    

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

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

    app.post('/', bodyParser.json(), function(req, res) {
      // handle route here
    })
    

    要不将其用于某些路由,请不要将其包含在路由中。

    【讨论】:

    • 感谢您提供的所有变体!解决了我的问题!值得一提的是,我不得不为 app.use(bodyParser.json());和 app.use(bodyParser.urlencoded({extended: true }));
    【解决方案2】:

    使用 form.serialize 创建一个变量并将结果作为参数包含在内。 var req = document.forms[0].serialize(); app.post('/myRequest', req, res) { // req is not parsed to json now });

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2016-04-06
      • 2021-10-03
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      相关资源
      最近更新 更多