【问题标题】:Simplify REST put/post calls简化 REST put/post 调用
【发布时间】:2016-07-11 01:12:52
【问题描述】:

将 express.Router() 与 Postgres 后端一起使用,在编写 put/post 时,单独输入每个 db 字段可能非常费力。例如:

router.route('/bears/:bear_id') .get(函数(req, res) { ... })

.put(function(req, res) {
    Bear.findById(req.params.bear_id, function(err, bear) {
        if (err)
            res.send(err);
        bear.name = req.body.name;
        bear.field1 = req.body.field1;
        bear.field2 = req.body.field2;
        bear.field3 = req.body.field3;
        bear.field4 = req.body.field4;
        bear.moreFields = req.body.moreFields;
        etc.

        bear.save(function(err) {
            if (err)
                res.send(err);
            res.json({ message: 'Bear updated!' });
        });
    });
});

那么--有没有一种模式或者JS工具可以在假设JSON键值和db字段名相同的情况下,自动将所有对象名传播到正确的req.body名?

我不想使用 ORM。

谢谢!

【问题讨论】:

    标签: rest express post put


    【解决方案1】:

    对于 POST 动词只需添加主体来创建方法:

      Bear.create(req.body).then(function() {
          //...
      });
    

    对于PUT动词,你必须像往常一样在数据库中找到文档,然后循环更新它

    Bear.findById(req.params.bear_id, function(err, bear) {
        for (let elem in req.body) {
            bear[elem] = req.body[elem];
        }
    
        bear.save((err, bear)=> {
            if (err) {
                return next(err);
            } else {
                res.json({ message: 'Bear updated!' });
            }
        });
    });
    

    必须安装包体解析器。

    【讨论】:

    • 谢谢。我没有提到我没有使用 Mongo 作为我的后端。使用 Postgres。更新了我的问题。
    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2012-07-18
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多