【问题标题】:access object in array for POST method访问 POST 方法的数组中的对象
【发布时间】:2018-12-04 07:49:28
【问题描述】:

我正在通过 mongo/mongoose 创建一个 POST 方法:

Department
    .create({
        name: req.body.name,
        link: req.body.link,
        state: req.body.state,
        requirements: req.body.requirements,
        salary: req.body.salary,
        description: req.body.description
    })

requirements 是一个包含其他项目的对象:

requirements: {
    age: 21,
    citizenship: "yes",
    degree: "4-year"
}

在创建之前,我正在检查是否提供了所有字段:

router.post('/create', (req, res) => {
const requiredFields = ["name", "link", "state", "age", "citizenship", "degree" "salary", "description"];
for(let i=0; i < requiredFields.length; i++){
    const field = requiredFields[i];
    if(!(field in req.body)){
        const message = `Missing \`${field}\` field in request body`;
        console.error(message);
        return res.status(400).send(message);
    };
};

由于agecitizenshipdegree 是对象项,我不能将它们的字符串放在 requiredFields 中。它在Missing age field in request body 处出错。知道如何检查它们是否在 req.body 中提供吗?

【问题讨论】:

  • 我将使用 revalidator 之类的东西来验证请求正文。

标签: javascript arrays mongodb mongoose


【解决方案1】:
  1. 要访问嵌套对象,您可以将必填字段保存为“requirement.age”而不是“age”,然后可以使用 lodash 库中的 get 函数。所以你的情况会变成:

`

if (typeof(_.get(req.body, "requirement.age") === 'undefined')) {
  //Missing field    
}

`

  1. 您可以尝试扁平化 req.body 结构,如:

Object.assign(req.body, req.body.requirement)

// This would make your req.body look like 

{
  name: 'x',
  link: 'y',
  requirement: {
    age: 1
    ..
  },
  age: 1
  ..
}

或者你可以将它分配给另一个变量然后使用。

let reqBodyReplica = Object.assign({}, req.body, req.body,requirement)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多