findOne не работает? пн goose / сервер mongodb - PullRequest
0 голосов
/ 07 августа 2020
app.post("profile/:id", (req, res) => {
    const id = req.params.id



    User.findById(id).then((user) => {
        if (!user) {
            res.status(404).send('Resource not found')
        } else {
            const keys = Object.keys(req.body)
            keys.forEach(key => {
                if (key === "username") {
 
                   const foundUser = User.findOne({ "username": req.body.username })

                   if (foundUser === null)
                        user.username = req.body.username
                    
                }



            })
            user.save()




        }
    })
        .catch((error) => {
            log(error)
            res.status(500).send('Internal Server Error')  // server error
        })

});

в основном у пользователя есть свойства {_id: objectid, username: string, password: string, ... и т.д.}

Я отправляю этому маршруту json, как показано ниже, чтобы изменить его имя пользователя

{"username": "Admin123"}

Предположим, что Admin123 не существует, тогда const foundUser не будет нулевым, потому что в коллекции пользователей нет пользователя с именем Admin123. Однако const foundUser никогда не равен нулю? Не уверен, что делаю не так

1 Ответ

1 голос
/ 07 августа 2020

Эй, как насчет меньшего решения, которое я даю вам, чтобы просто улучшить ваш код

Что не так с вашим кодом ??

  • Вы запрашиваете то же самое пользователь дважды!
  • Вы находитесь на холме функций обратного вызова
  • Зацикливание пользователя, когда вы знаете, что у него есть «имя пользователя»
  • НЕ ДОЛЖЕН ИСПОЛЬЗОВАТЬ МЕТОД СОХРАНЕНИЯ напрямую.

Что вам следует сделать в первую очередь, вы должны проверить, существует ли какой-либо пользователь с таким же именем пользователя! вы должны вернуть дубликат или не разрешен или уже существует

И вы должны использовать функцию запросов в mon goose или в любой другой БД, потому что это быстрее прочтите мой код ниже, и я помогу вам, если вы его не поймете. не стесняйтесь комментировать или напишите мне на fb.com/mustafa.ali2

// I'm using here async await which is much cleaner and easy to read ?
app.post('profile/:id', async (req, res) => {
  // Try catch for any error other error ?
  try {
    // Destructuring the id form req.params (new way to do things !)
    const { id } = req.params
    // Querying the DB (MongoDB) and updating when we fond the user that match the given _id ?
    const user = await User.findOneAndUpdate(
      { _id: new mongoose.Types.ObjectId(id), username: null },
      { $set: { username: req.body.username } }
    )
    // if user not found return error ?
    if (!user)
        return res.status(404).send('Resource not found');
    // if user found return success ?
    res.status(200).send('Updated successfully');
  } catch (err) {
    log(err);
    res.status(500).send('Internal Server Error');
  }
})

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