可以传播运营商解决以下问题吗?想象一下,我有更多的字段,然后我必须为每个字段声明req.body.something,这是非常繁琐的。
app.use((res,req,next) => {
const obj = {
name: req.body.name,
age: req.body.age,
gender: req.body.gender
}
//
User.saveUser(resp => res.json(resp)) //User model
})
答案 0 :(得分:1)
您可以使用lodash的pick()
:
_。pick(object,[paths])
创建一个由拾取的对象属性组成的对象。
示例代码是:
const _ = require('lodash');
...
const obj = _.pick(req.body, ['name', 'age', 'gender']);
如果gender
中不存在req.body
,则会被忽略 - 结果obj
对象将没有gender
字段。
如果需要所有req.body
字段,您只需将req.body
分配给obj
:
const obj = req.body;
要验证req.body
内容,您可以使用lodash的.has()
:
_。有(对象,路径)
检查path是否是对象的直接属性。
示例代码为:
_.has(req.body, ['name', 'age', 'gender']); // return true if all fields exist.
答案 1 :(得分:0)
您可以使用destructuring assignment:
const obj = req.body;
const { name, age, gender } = obj;
但是,你仍然必须验证它,并计算你的计划中的所有这些。
<强>更新强>
添加一些验证示例 假设您的路线中有这样的架构:
const tv4 = require('tv4');
const schema = {
type: 'object',
properties: {
name: 'string',
age: number,
gender: {
type: 'string',
pattern: /f|m/i
}
},
required: ['name']
};
然后,在您的处理程序中验证:
if (tv4.validate(req.body, schema) {
// continue your logic here
} else {
// return 400 status here
}