使用 Express,我可以自动修剪 req.body 中所有传入的 POSTed 字段吗?

k00*_*00k 2 validation trim node.js express

我首先在我的 api (Express 3.3.8) 中使用express-form,以便从传入的 POSTed 字段中修剪前导和尾随空格。

但是,我相信要使用它,我必须将中间件中的表单字段和规则包含到我的路由中,如下所示:

app.post('/api/test', form( field("username").trim(), field("password").trim(), function(req, res...

我的问题是,有没有办法在不单独指定字段的情况下自动进行修剪?我知道配置选项: autoTrim,但我认为我仍然需要在每个路由/中间件的基础上指定字段,对吗?我尝试将它排除在中间件之外,只执行form.configure({autoTrim:true}),但req.body字段没有任何变化。就像我从来没有包括express-form过一样。

我不致力于express-form。如果有另一种方法可以让 Express 始终修剪传入的req.body字段,请告诉我。

Ser*_*gey 8

app.use(postTrimmer);

function postTrimmer(req, res, next) {
    if (req.method === 'POST') {
        for (const [key, value] of Object.entries(req.body)) {
            if (typeof(value) === 'string')
                req.body[key] = value.trim();
        }
    }
    next();
}
Run Code Online (Sandbox Code Playgroud)

"body-parser"在使用postTrimmer中间件之前不要忘记打开模块。

  • 如果我们在 body 中有子对象,它将不起作用,例如 `{ param1: " 它将被修剪 ", param2: { subparam: " 它不会被修剪 " } }` (2认同)

k00*_*00k 6

由于似乎必须使用 单独声明字段express-form,因此我决定暂时编写自己的空白修剪中间件,因为我找不到现有的简单解决方案。我使用underscore.js,所以你会看到它的map功能在使用中。否则,您可以使用本机或类似的程序进行自己的循环Object.keysreq.body这完全重写了!中的所有字段。请注意,这是解决更大验证问题的权宜之计。我们只是暂时这样做,直到我们有时间清理整个验证。这是我的代码(app.use(app.router)当然放在前面):

var trimmer = function(req, res, next){
  req.body = _.object(_.map(req.body, function (value, key) {
    return [key, value.trim()];
  }));
  next();
}

app.use(trimmer);
Run Code Online (Sandbox Code Playgroud)