Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript express.js中的spread operator表单提交_Javascript_Node.js_Express - Fatal编程技术网

Javascript express.js中的spread operator表单提交

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

播音员能解决下面的问题吗?假设我有更多的字段,那么我必须为每个字段声明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
})
您可以使用:

但是,您仍然必须验证它,并在您的方案中计算所有这些

更新:

添加一些验证示例。
在您的路线中假设这样的模式:

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.