【问题标题】:Mapping req.body properties to object key将 req.body 属性映射到对象键
【发布时间】:2019-05-16 08:51:28
【问题描述】:

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

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。

【问题讨论】:

  • 如果 req.body 和你的数据库 db 模型键相同,你可以写 return BSRequest.create(req.body).then(bsRequest => res.status(201).send(bsRequest)) .catch(error => res.status(400).send(error));
  • req.body 已经是一个对象。因此,如果您愿意,可以直接输入。如果它有您不需要的额外参数,您可以删除它们或进行映射
  • @Arun 你应该把它作为答案发布:)

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


【解决方案1】:

如果 req.body 和您的数据库 db 模型键相同,您可以编写

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

评论:我不建议您将 req.body 中的值直接存储到数据库中。在将它们保存到数据库之前,请务必包含 type-check 以获得从前端获取的值。您可以通过对 Akshay 的回答进行一些修改来做到这一点。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      是的,我们有 es6 传播功能可以做到这一点。请检查link

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

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

      【讨论】:

        猜你喜欢
        • 2017-03-16
        • 2017-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多