Javascript express.js中的spread operator表单提交
播音员能解决下面的问题吗?假设我有更多的字段,那么我必须为每个字段声明req.body.something,这太单调了Javascript express.js中的spread operator表单提交,javascript,node.js,express,Javascript,Node.js,Express,播音员能解决下面的问题吗?假设我有更多的字段,那么我必须为每个字段声明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
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
})
您可以使用:
但是,您仍然必须验证它,并在您的方案中计算所有这些
更新:
添加一些验证示例。在您的路线中假设这样的模式:
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
}
您可以使用的pick()
:
拾取(对象,[路径])
创建由拾取的对象特性组成的对象
示例代码为:
const _ = require('lodash');
...
const obj = _.pick(req.body, ['name', 'age', 'gender']);
如果req.body
中不存在gender
,它将被忽略——结果obj
对象将没有gender
字段
如果需要所有
req.body
字段,您可以将req.body
分配给obj
:
const obj = req.body;
要验证
req.body
内容,可以使用lodash的.has()
:
\uu.has(对象、路径)
检查路径是否为对象的直接属性
示例代码为:
_.has(req.body, ['name', 'age', 'gender']); // return true if all fields exist.
我认为应该是
req,res,next
,而不是res,req,next
?如果你想使用所有东西:const obj=req.body
?无法查看使用的obj
顺便说一句。@Jorg下面有一条注释const obj=…
语句。我猜OP意味着忽略对象的使用,没有“扩展操作符”。有一个…
标点符号,用于和rest参数中。:-)验证是express中的一个难题,您有推荐的库吗?Mongoose也有内置的验证器,我可以用它吗?我用jsonScheme来描述我的期望,用tv4 npm模块来验证scheme中的对象。没有痛苦,一切顺利。@JennyMok您可以使用lodash的.has()
来验证req.body
。请核对我的答案,完全不一样。使用scheme,您可以说需要哪些属性,您可以说每个类型,您可以告诉如何验证每个(模式)。。。这是一个非常灵活的工具。@Lazyexpert啊,明白了。如果OP需要复杂的JSON结构验证,JSON模式是更好的选择。
_.has(req.body, ['name', 'age', 'gender']); // return true if all fields exist.