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

时间:2015-05-15 18:20:55

标签: node.js validation express trim

我开始使用express-form和我的api(Express 3.3.8)来修剪传入的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字段,请告诉我们。

3 个答案:

答案 0 :(得分:2)

由于似乎必须使用express-form单独声明字段,我现在决定编写自己的空白修剪中间件,因为我找不到现有的简单解决方案。我使用underscore.js,因此您会看到正在使用的map函数。否则,您可以使用本机Object.keys或类似的方式进行自己的循环。这完全重写了req.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);

答案 1 :(得分:0)

app.use(postTrimmer);

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

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

答案 2 :(得分:0)

我为此创建了一个 npm 模块。它为您提供了 4 个中间件,您可以使用它们来修剪 req.body、req.query、req.params 或所有这三个。它还提供了一个单独的实用程序,您可以使用它来修剪任何对象。 该模块以递归方式工作,因此无论字符串如何嵌套在对象中,它都会被修剪。

request_trimmer

npm i request_trimmer

const express =  require('express');
const app = express();
    
const { trim_all,trim_body,trim_params,trim_util } = require('request_trimmer');
app.use(express.json());
#trim request body and query.
app.use(trim_all)