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

Mapping req.body properties to object key

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

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的属性,以便将这些映射到对象的键?或者其他一些我可以简化它并减少代码的方法。

我正在使用 sequelize ORM。

是的,我们有 es6 传播功能this.Kindly检查这个link

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

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

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

## 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) => { ... })

如果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 的回答进行一些修改来做到这一点。