доступ к объекту в массиве для метода POST - PullRequest
0 голосов
/ 25 июня 2018

Я создаю метод POST через mongo / mongoose:

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: {
    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);
    };
};

Из-за того, что age, citizenship и degree являются объектами, я не могу поместить их строку в обязательные поля. Ошибка на Missing age field in request body. Любая идея, как проверить, что они были представлены в req.body?

1 Ответ

0 голосов
/ 25 июня 2018
  1. Чтобы получить доступ к вложенному объекту, вы можете сохранить обязательное поле как «require.age» вместо «age», а затем использовать функцию get в библиотеке lodash.Таким образом, ваше состояние станет:

`

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

`

Вы можете попытаться сгладить структуру 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...