将req.body属性映射到对象键

时间:2019-05-16 08:51:28

标签: javascript node.js express ecmascript-6 ecmascript-7

现在,当我想向数据库添加对象时,请执行以下操作:

return BSRequest.create({
            salon_name: req.body.salon_name,
            salon_type: req.body.salon_type,
            employees: req.body.employees,
            postcode: req.body.postcode,
            city: req.body.city,
            website: req.body.website,
            first_name: req.body.first_name,
            last_name: req.body.last_name,
            email: req.body.email,
            phone_number: req.body.phone_number
        })
            .then(bsRequest => res.status(201).send(bsRequest))
            .catch(error => res.status(400).send(error));

Javascript / Node中是否有一种方法可以自动获取req.body的属性,以便可以将这些属性映射到对象的键?或其他可以简化它并减少代码的方法。

我正在使用序列化ORM。

3 个答案:

答案 0 :(得分:1)

我可以看到您已经在使用body解析器或某种其他类型的请求解析器(显然),因此您只需编写一个单行实用程序即可

## req.body = {a: 1, b:2, c:3, d:4}
let targetObj = {}
let keysYouWant = ['key1', 'key2']
Object.keys(req.body).forEach(key => { if (keysYouWant.includes(key)) targetObj[key] = req.body[key] })

但是如果req.body具有与targetObject中想要的键相同的键,则只需执行此操作

return BSRequest.create(req.body)
    .then((bsRequest) => { ... })
    .catch((error) => { ... })

答案 1 :(得分:0)

是的,我们具有es6扩展功能。请检查此link

注意:req.body中的所有值都将被传递

return BSRequest.create({...req.body}).then(bsRequest => res.status(201).send(bsRequest)).catch(error => res.status(400).send(error));

答案 2 :(得分:0)

如果req.body和数据库数据库模型密钥相同,则只需编写

return BSRequest.create(req.body).then(bsRequest => res.status(201).send(bsRequest)) .catch(error => res.status(400).send(error));

注释:我不建议您将req.body中的值直接存储到数据库中。对于从前端获取的值,请务必包含type-check,然后再将其保存到数据库中。您可以通过对Akshay的答案进行一些修改来做到这一点。