PUT自定义查找更新REST API节点Js

时间:2018-04-30 18:11:29

标签: node.js mongodb rest express

我在Node js和Mongodb中创建了一个基本的REST api。我想使用Find with Custom Parameter更新值,例如name。我能够让用户使用自定义GET方法,但它不能在PUT / POST方法中工作。

以下是架构:

{
    name:String,
    value:Number
}

以下是代码:

// v1 / api / users /:name -Update

api.put('/users/:name',(req,res)=>{
Users.find({name:req.params.name},(err,user)=>{
if(err){

  res.send(err);
}
console.log(req.body.name);
console.log(req.body.value);


user.value= req.body.value;
user.save(err => {
  if(err){

    res.send(err);
  }
  res.json({message:'Updated '});

   });


   });
 });

现在举例来说,如果mongoDb"name":"sam",我使用`localhost:3000 / v1 / api / users / sam``和正文

1。{"value":300},我收到错误

  

无法设置属性' name'未定义的

2.当我记录第一个错误时,我发现没有定义名称给了我错误。所以我使用了这个{"name":"sam","value":300},现在错误是用户。保存不是一个功能。

使用FindById进行更新是有效的,但在客户端的情况下,用户无法从数据库中获取id,因此我尝试了上述方法。

请帮帮我

2 个答案:

答案 0 :(得分:0)

尝试使用此代码:

api.put('/users/:name', (req, res) => {
    Users.find({
        name: req.params.name
    }, (err, user) => {
        if (err) {
            res.send(err);
        }

        if (!user) {
            res.send({
                message: 'User not found'
            });
        }

        user.value = req.body.value;
        user.save(err => {
            if (err) {
                res.send(err);
            }
            res.json({
                message: 'Updated '
            });

        });

    });
});

答案 1 :(得分:0)

  

错误是user.save不是一个函数。

这是因为find()会返回[]个匹配的文档。

根据docs

  

findOne()它是一个可能为null的单个文档,find()是一个文档列表,

即使只有{"name":"sam"}的文档,您也会获得[{"name":"sam"}]。正在调用导致错误的数组save()

'use strict';

api.put('/users/:name', (req, res) => {
  Users.findOne({
    name: req.params.name
  }, (err, user) => {

    if (err) {
      return res.send(err);
    }

    if (user === null) {
      return res.send({
        msg: 'No matching user with name sam'
      });
    }

    console.log(req.body.name);
    console.log(req.body.value);

    user.value = req.body.value;
    user.save(err => {
      if (err) {

        res.send(err);
      }
      res.json({message: 'Updated '});
    });

  });
});

您还可以通过获取find()结果的第一个元素,然后对其进行操作来解决此问题。