【问题标题】:PUT custom find update REST API Node JsPUT 自定义查找更新 REST API 节点 Js
【发布时间】:2018-05-01 17:37:05
【问题描述】:

我在 Node js 和 Mongodb 中创建了一个基本的 REST api。我想使用带有自定义参数的查找来更新值,例如name。我能够使用自定义 GET 方法获取用户,但它在 PUT/POST 方法中不起作用。

这是架构:

{
    name:String,
    value:Number
}

代码如下:

//v1/api/users/:name -更新

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` 和 body 作为

1.{"value":300},我收到错误提示

无法设置未定义的属性“名称”

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

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

请帮帮我

【问题讨论】:

    标签: node.js mongodb rest express


    【解决方案1】:

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

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

    根据docs

    findOne() 它是一个可能为空的单个文档,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() 结果的第一个元素,然后对其进行操作来解决此问题。

    【讨论】:

      【解决方案2】:

      尝试使用此代码:

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

      【讨论】:

        猜你喜欢
        • 2022-01-13
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多