Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Node.js MongooseJS在保存数据后无法检索数据_Node.js_Mongoose_Passport.js_Passport Local - Fatal编程技术网

Node.js MongooseJS在保存数据后无法检索数据

Node.js MongooseJS在保存数据后无法检索数据,node.js,mongoose,passport.js,passport-local,Node.js,Mongoose,Passport.js,Passport Local,我有一个简单的ExpressJS应用程序,我正在尝试使用passport、passport local和passport local mongoose向其添加用户身份验证,但在我将用户数据保存到db上后,mongoose无法检索到它,尽管我可以通过mongo cli查看数据 在主express模块中,我有: //Passport会话设置。 var User=需要(“./型号/用户”); use(新的LocalStrategy(User.authenticate()); passport.seri

我有一个简单的ExpressJS应用程序,我正在尝试使用passport、passport local和passport local mongoose向其添加用户身份验证,但在我将用户数据保存到db上后,mongoose无法检索到它,尽管我可以通过mongo cli查看数据

在主express模块中,我有:

//Passport会话设置。
var User=需要(“./型号/用户”);
use(新的LocalStrategy(User.authenticate());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
我的用户模型模块有:

var mongoose=require('mongoose');
var Schema=mongoose.Schema;
var passportLocalMongoose=require('passport-local-mongoose');
//用户模式
var User=newschema({
用户名:{type:String,必需:true,unique:true},
密码:{type:String,必需:true}
});
用户插件(passportLocalMongoose);
module.exports=mongoose.model('User',User);
在我的routes模块中,我使用以下代码创建一个用户:

router.post('/register',函数(req,res){
var u=请求主体用户名;
var p=请求主体密码;
log('为'+u+'创建帐户:'+p));
//在数据库上存储客户端
var usr=新用户({用户名:u,密码:p});
usr.save(函数(错误){
如果(错误){
控制台日志(err);
返回res.render('register',{title:'register',错误:err.userMessage});
}否则{
log('user:'+usr.username+“saved.”);
passport.authenticate('local')(请求、请求、函数(){
返回res.redirect('/dashboard');
});
}
});
});
但是,当我尝试使用passport.authenticate方法对用户进行身份验证时,mongoose无法在db中找到该用户,正如我在mongoose日志中看到的:

Login request @  1422120637815
Mongoose: users.findOne({ username: 'e@e.com' }) { fields: undefined }  
但在mongo cli上,我可以看到以下数据:

> db.User.find()
{ "username" : "e@e.com", "password" : "123", "_id" : ObjectId("54c3d688fc71a4001db30612"), "__v" : 0 }

Mongoose正在查找名为“users”的集合,但您的数据似乎存储在“User”中。model()的API是mongoose#model(名称、[schema]、[collection]、[skipInit])。因此,您可以通过添加第三个参数(例如

module.exports = mongoose.model('User', User, 'User');
编辑1: 尝试在mongoose local中使用内置的register()方法

router.post('/register', function(req, res) {

  var u = req.body.username;
  var p = req.body.password;

  console.log('Creating account for ' + u + ':' + p);
  // Store client on DB
    Account.register(new Account({ username: req.body.username }), req.body.password, function(err) {
     if(err) {
      console.log(err);
      return res.render('register', {title: 'Register', error: err.userMessage});
     } else {
       passport.authenticate('local')(req, res, function () {
         return res.redirect('/dashboard');
       });
     }
    });
});

还是不行。插入和检索是在同一个集合上进行的,但检索没有得到任何数据。我认为还有其他问题,因为passport local mongoose没有对密码进行加密,而是以纯文本形式存储。请尝试使用mongoose local附带的.register()方法,我已更新了我的答案。谢谢!它在使用register()后工作,但我必须更改模式,以便密码不是必填字段。