用于嵌套 req.body 数据的 ExpressJs Trim 中间件
ExpressJs Trim middleware for nested req.body data
我如何创建一个中间件来 trim 所有 req.body 数据甚至 NESTED 数据?
我也接受一个值得信赖的编码良好的包裹。
请注意,我在这里使用 true:
app.use(bodyParser.urlencoded({ extended: true }));
此代码参考
trim: (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();
}
这个可以工作,但不适用于嵌套数据
在一行中实现此目的的一种方法是利用 JSON.stringify 的 replacer
功能中内置的递归,检查值是数字还是字符串然后 trim 它,然后将结果解析回一个对象。
let obj = {
"a": "f",
"b": {
"c": " g",
"d": "h",
"x": {
"a": [
'1 ', '2 ', '3 '
]
}
},
"e": " value3 "
};
obj = JSON.parse(JSON.stringify(obj, (k, v) => ['string', 'number'].includes(typeof v) ? v.trim() : v))
console.log(obj)
或者你可以使用一个递归函数,如果值是对象,数组然后调用这个函数,很多关于它的例子,做一个搜索。
您可以递归地遍历每个对象和数组,并trim相应地
function trim(body) {
for (const key in body) {
if (typeof body[key] === "object" || Array.isArray(body[key])) {
trim(body[key]);
} else if (typeof body[key] === 'string') {
body[key] = body[key].trim();
}
}
};
handleReq: (req, res, next) => {
if (req.method === 'POST') {
trim(req.body);
}
next();
}
我如何创建一个中间件来 trim 所有 req.body 数据甚至 NESTED 数据?
我也接受一个值得信赖的编码良好的包裹。
请注意,我在这里使用 true:
app.use(bodyParser.urlencoded({ extended: true }));
此代码参考
trim: (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();
}
这个可以工作,但不适用于嵌套数据
在一行中实现此目的的一种方法是利用 JSON.stringify 的 replacer
功能中内置的递归,检查值是数字还是字符串然后 trim 它,然后将结果解析回一个对象。
let obj = {
"a": "f",
"b": {
"c": " g",
"d": "h",
"x": {
"a": [
'1 ', '2 ', '3 '
]
}
},
"e": " value3 "
};
obj = JSON.parse(JSON.stringify(obj, (k, v) => ['string', 'number'].includes(typeof v) ? v.trim() : v))
console.log(obj)
或者你可以使用一个递归函数,如果值是对象,数组然后调用这个函数,很多关于它的例子,做一个搜索。
您可以递归地遍历每个对象和数组,并trim相应地
function trim(body) {
for (const key in body) {
if (typeof body[key] === "object" || Array.isArray(body[key])) {
trim(body[key]);
} else if (typeof body[key] === 'string') {
body[key] = body[key].trim();
}
}
};
handleReq: (req, res, next) => {
if (req.method === 'POST') {
trim(req.body);
}
next();
}