Хотите найти пользователя, используя идентификатор пользователя в узле js с помощью мангуста

#node.js

Вопрос:

хотите найти пользователя, используя идентификатор пользователя в узле js, используя мангуста, используя nodejs .при отправке он показывает, что пользователь не существует

  Route.get("/getdata",(req,res)=>{
                const { firstname,lastname,username}=req.body;
                const user = User.findOne({firstname,lastname,username});
                if(user===user._id){
                    res.status(200).json(user);
                    console.log(user);
                }
                else{
                    res.status(401).json("user not registered");
                    console.log("user is not registered");
                }
            });
 

индекс.ejs

     <!DOCTYPE html>
    <html>
      <head>
        <title>Welcome</title>
      </head>
      <body>
        <p>Hello world</p>
        <h1>Welcome to page </h1>
        <form action="/register/getdata" method="GET">
        <input type="text" name="userid" placeholder="enter user id">
        <button type="submit">click</button>
    </form>
      </body>
    </html>
 

Ответ №1:

Вам нужно знать об асинхронном, обещании, обратном вызове, асинхронном ожидании, чтобы исправить это.

          Route.get("/getdata",async (req,res)=>{
            const { firstname,lastname,username}=req.body;
            const user = await User.findOne({firstname,lastname,username});
            if(user===user._id){
                res.status(200).json(user);
                console.log(user);
            }
            else{
                res.status(401).json("user not registered");
                console.log("user is not registered");
            }
        });
 

Комментарии:

1. Всегда заключайте свой код в блок try catch при использовании асинхронной функции. В противном случае ваше приложение выйдет из строя, если произойдет какая-либо ошибка.

2. Нет необходимости проверять user===user.id , findOne() возвращает ли какое-либо значение, если пользователь уже существует, в противном случае его не существует.

Ответ №2:

Вы можете получить данные двумя способами.

способ обратного вызова

 User.findOne(filter, (err, doc){
  if(err) {
    //handle error and return.
  }
  //proceed with result.
});
 

Использование встроенного обещания

 User.findOne(filter)
.then(result=>{
//proceed with result.
})
.catch(err=>{
//handle error
})
 

Или Асинхронный/Ожидание

для использования Await вы должны сделать свою функцию асинхронной.

 Router.get('/getdata', async(req, res, next){
  try{
    const user = await User.findOne(filter);
    //proceed with result.
  }
  catch(err){
    //handle error
  }
})


----------
 

Ваш код нуждается в некоторой модификации, поэтому я публикую обновленный код.

 Route.get("/getdata", async(req,res)=>{
  try{
    const {firstname, lastname, username} = req.body;
    const user = await User.findOne({firstname, lastname, username});
    if(user){
      res.status(200).json(user);
      console.log(user);
    }else{
      res.status(401).json("user not registered");
      console.log("user is not registered");
    }
  }catch(err){
    console.log(err);
    //handle error
  }
});
 

Вам не нужно явно проверять user===user.id (я не знаю, для какой цели вы используете, так как неправильный объект не может быть равен его свойству), так как вы используете findOne() его, поэтому он даст результат только в том случае, если будет найдено совпадение с нулем.