Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在mongoose中使用findOne()_Javascript_Node.js_Mongoose - Fatal编程技术网

Javascript 如何在mongoose中使用findOne()

Javascript 如何在mongoose中使用findOne(),javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我有node.js代码,我使用mongoose。我没有收到任何错误,只是成功登录了 几天来我一直在努力解决这个问题,我尝试了很多方法,但都没有成功 这是服务器代码: const express=require('express'); 常量app=express(); const bodyParser=require('body-parser'); const mongoose=require('mongoose'); const model=require('.//models/schema')

我有node.js代码,我使用mongoose。我没有收到任何错误,只是成功登录了

几天来我一直在努力解决这个问题,我尝试了很多方法,但都没有成功

这是服务器代码:

const express=require('express');
常量app=express();
const bodyParser=require('body-parser');
const mongoose=require('mongoose');
const model=require('.//models/schema');
应用程序使用(express.static('public'));
app.get('/register',函数(请求、响应){
sendFile(uu dirname+'/html/register.html');
});
app.get('/login',函数(请求、响应){
response.sendFile(uu dirname+'/html/login.html')
});
const listener=app.listen(3000,函数(){
让myURL=newURL(`localhost:${listener.address().port}/register`);
console.log(myURL.href);
});
猫鼬连接(`mongodb://localhost${listener.address().port}:/register`{
useNewUrlParser:true,
useUnifiedTopology:正确
});
app.use(bodyParser.urlencoded({
扩展:false
}));
use(bodyParser.json());
app.post('/submit data',异步(req,res)=>{
res.redirect(“/login”)
试一试{
const newUser=新模型({
“登录”:req.body.login,
“密码”:req.body.password,
“性别”:req.body.gender,
“生日”:req.body.birth
});
等待newUser.save();
console.log(“用户注册”);
}抓住{
console.log('注册失败')
}
});
app.post(“/submit login”,(请求、回复)=>{
const user=model.findOne({
“登录”:req.body.login,
“密码”:req.body.password,
});
如果(!用户){
log('Login failed');
}否则{
console.log('成功登录')
}
});
这是模型代码:

const mongoose=require('mongoose');
const Schema=mongoose.Schema;
设schema=newschema({
“登录”:字符串,
“密码”:字符串,
“性别”:字符串,
“生日”:字符串
});
module.exports=mongoose.model('allInfo',schema);
如果密码或登录名不同,我希望打印“登录失败”,如果密码和登录名相同,则打印“成功登录”。

您需要查看

您应该将条件移动到回调,如下所示:

const user = model.findOne({
  'login': req.body.login,
  'password': req.body.password,
}, function (err, user) {
  if (!user) {
    console.log('Login failed');
  } else {
    console.log('Successfully logged in')
  }
}));
更新 还有一件事需要注意,来自文档

第一个参数是模型用于的集合的单数名称。Mongoose会自动查找模型名称的复数小写版本

这意味着在您的代码中,模型将查找名为
allinfo
的集合,如果数据库中的表名为
users
,则应更改此行

module.exports = mongoose.model('allInfo', schema);
为此:

module.exports = mongoose.model('User', schema); // This will look-up the collection users

因为if语句总是真实的
if(!user)
。User为true,因为具有键值对的对象为truthy,即:它将解析为true。即使是空对象也是真实的:
let user={};控制台日志(!!用户)
@Michelangelo当没有匹配项时,mongoose.findOne将返回
null
,因此if条件并不总是真实的。@CheapsiT你能记录用户的结果吗?@CheapsiT我添加了一些注意事项,也许这就是你的困惑,如果它仍然不能解决,请向我们提供错误消息或更多信息以帮助您进行调试,例如:
console.log(user)
like@Michelangelo