#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()
его, поэтому он даст результат только в том случае, если будет найдено совпадение с нулем.