使用 Express,我可以自动 trim req.body 中所有传入的 POSTed 字段吗?
Using Express, can I automatically trim all incoming POSTed fields in req.body?
我开始使用 express-form 和我的 api (Express 3.3.8) 以便 trim 传入 POSTed 字段的前导和尾随空格。
但是,我相信要使用它,我必须在我的中间件中将表单字段和规则包含到我的路由中,如下所示:
app.post('/api/test', form(
field("username").trim(),
field("password").trim(), function(req, res...
我的问题是,有没有办法在不单独指定字段的情况下自动执行 trim?我知道配置选项:autoTrim
,但我认为我仍然需要在每个 route/middleware 的基础上指定字段,对吗?我尝试将它从中间件中移除,只执行 form.configure({autoTrim:true})
,但 req.body
字段没有任何变化。就像我根本没有包含 express-form
一样。
我不承诺 express-form
。如果有另一种方法可以让 Express 始终 trim 传入 req.body
字段,请告诉我。
似乎必须使用 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);
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();
}
在使用postTrimmer
中间件之前不要忘记打开"body-parser"
模块。
我为此创建了一个 npm 模块。它为您提供了 4 个中间件,您可以使用它们来 trim req.body、req.query、req.params 或所有这三个。它还提供了一个单独的实用程序,您可以使用它来 trim 任何对象。
该模块递归工作,因此无论字符串在对象中的嵌套程度如何,都将是 trimmed.
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)
我开始使用 express-form 和我的 api (Express 3.3.8) 以便 trim 传入 POSTed 字段的前导和尾随空格。
但是,我相信要使用它,我必须在我的中间件中将表单字段和规则包含到我的路由中,如下所示:
app.post('/api/test', form(
field("username").trim(),
field("password").trim(), function(req, res...
我的问题是,有没有办法在不单独指定字段的情况下自动执行 trim?我知道配置选项:autoTrim
,但我认为我仍然需要在每个 route/middleware 的基础上指定字段,对吗?我尝试将它从中间件中移除,只执行 form.configure({autoTrim:true})
,但 req.body
字段没有任何变化。就像我根本没有包含 express-form
一样。
我不承诺 express-form
。如果有另一种方法可以让 Express 始终 trim 传入 req.body
字段,请告诉我。
似乎必须使用 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);
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();
}
在使用postTrimmer
中间件之前不要忘记打开"body-parser"
模块。
我为此创建了一个 npm 模块。它为您提供了 4 个中间件,您可以使用它们来 trim req.body、req.query、req.params 或所有这三个。它还提供了一个单独的实用程序,您可以使用它来 trim 任何对象。 该模块递归工作,因此无论字符串在对象中的嵌套程度如何,都将是 trimmed.
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)