Node.js 想要在使用mongoose的节点js中找到使用user_id的用户吗

Node.js 想要在使用mongoose的节点js中找到使用user_id的用户吗,node.js,Node.js,想要在使用nodejs的mongoose和nodejs的节点js中找到使用user_id的用户。提交时显示用户不存在 Route.get("/getdata",(req,res)=>{ const { firstname,lastname,username}=req.body; const user = User.findOne({firstname,lastname,username});

想要在使用nodejs的mongoose和nodejs的节点js中找到使用user_id的用户。提交时显示用户不存在

 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");
                }
            });
index.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>

欢迎
你好,世界

欢迎来到第页 点击
您需要了解异步、承诺、回调、异步等待来修复它

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

您可以通过两种方式获取数据

回调方法

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
})
或异步/等待

要使用wait,必须使函数异步

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()
,所以只有在找到匹配项时,它才会给出结果,否则为null。

使用异步函数时,请始终将代码包装在try-catch块中。否则,如果出现错误,应用程序将崩溃。无需检查
user===user.id
如果
findOne()
返回一些值,则用户已存在,否则不存在。