PUT пользовательское обновление поиска REST API Node Js - PullRequest
0 голосов
/ 30 апреля 2018

Я создал базовый API REST в Node js и Mongodb. Я хочу обновить значение, используя Find с пользовательским параметром, таким как name. Я могу получить пользователя, используя метод Custom 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`` и body в качестве

1. {"value":300}, я получаю ошибку

Невозможно установить свойство 'name' из неопределенного

2. Когда я зарегистрировал 1-ю ошибку, я узнал, что отсутствие определения имени дает мне ошибку. поэтому я использовал это {"name":"sam","value":300} и теперь ошибка пользовательская. сохранить не функция.

Обновление с использованием FindById работает, но в случае клиента пользователь не может получить идентификатор из базы данных, поэтому я попробовал описанный выше метод.

Пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

ошибка user.save не является функцией.

Это потому, что find() возвращает [] соответствующих документов.

Согласно документам ,

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(), а затем обработав его.

0 голосов
/ 30 апреля 2018

Попробуйте использовать этот код:

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

        });

    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...