在express.js中传播运营商表单提交

时间:2017-06-26 08:03:01

标签: 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
})

2 个答案:

答案 0 :(得分:1)

您可以使用lodashpick()

  

_。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
}