简化REST拨打/发布呼叫

时间:2016-07-11 01:12:52

标签: rest express post put

使用带有Postgres后端的express.Router(),当写入put / post时,单独输入每个db字段可能非常费力。例如:

router.route( '/熊/:bear_id')     .get(function(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工具可以自动将所有对象名称传播到正确的req.body名称,假设JSON键值和db字段名称相同?

我不想使用ORM。

谢谢!

1 个答案:

答案 0 :(得分:0)

对于 POST 动词,只需添加body来创建方法:

  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!' });
        }
    });
});

必须安装包体解析器。