[Mongoose]如何在 app.js 中使用两个不同的模式两次使用相同的模型
Posted
技术标签:
【中文标题】[Mongoose]如何在 app.js 中使用两个不同的模式两次使用相同的模型【英文标题】:[Mongoose]How can I use the same model twice with two different schemas within app.js 【发布时间】:2014-09-22 05:53:45 【问题描述】:我正在尝试访问相同的数据库/模型以进行注册和登录功能,但每次我尝试运行我的节点应用程序时都会收到此错误消息“编译后无法覆盖‘用户’模型”这是我的代码:
//sign-up schema
var Schema = new mongoose.Schema(
_id: String,
name: String,
username: String,
password: String,
age: Number
);
var user = mongoose.model('users', Schema);
//sign-up login
app.post('/new', function(req, res)
new user(
_id: req.body.email,
name: req.body.name,
username: req.body.username,
password: req.body.password,
age: req.body.age
).save(function(err, doc)
if(err) res.json(err);
else res.send('Successfully Signed up');
);
);
//login schema
var Schema = mongoose.Schema;
var UserDetail = new Schema(
username: String,
password: String
,
collection: 'users'
);
var UserDetails = mongoose.model('users', UserDetail);
//login logic
passport.use(new LocalStrategy(function(username, password, done)
process.nextTick(function()
UserDetails.findOne(
'username': username,
, function(err, user)
if (err)
return done(err);
if (!user)
return done(null, false);
if (user.password != password)
return done(null, false);
return done(null, user);
);
);
));
【问题讨论】:
这有什么意义,因为您可以使用相同的架构查找用户名和密码。 对不起,我不知道这一点,你能帮帮我吗,你能给我一个例子吗?谢谢你告诉我:D 【参考方案1】:您仍然可以使用相同的架构进行查找。
架构
var Schema = new mongoose.Schema(
_id: String,
name: String,
username: String,
password: String,
age: Number
);
var user = mongoose.model('users', Schema);
注册
app.post('/new', function(req, res)
new user(
_id: req.body.email,
name: req.body.name,
username: req.body.username,
password: req.body.password,
age: req.body.age
).save(function(err, doc)
if (err) res.json(err);
else res.send('Successfully Signed up');
);
);
登录
passport.use(new LocalStrategy(function(username, password, done)
process.nextTick(function()
user.findOne(
'username': username
, function(err, user)
if (err)
return done(err);
if (!user)
return done(null, false);
if (user.password !== password)
return done(null, false);
return done(null, user);
);
);
));
如果您不想在响应中返回密码,只需添加
delete user.password;
在回调之前。
【讨论】:
由于某种原因,它仍然无法正常工作,我已经单独测试了身份验证脚本,并且可以正常工作。我不确定为什么它在实际应用中不起作用,你有什么想法吗? 我设置了一个认证成功和认证失败的回调函数,我返回了一个失败的认证。 app.post('/login', passport.authenticate('local', successRedirect: '/loginSuccess', failureRedirect: '/loginFailure' ) ); app.get('/loginFailure', function(req, res, next) res.send('验证失败'); ); app.get('/loginSuccess', function(req, res, next) res.send('Successfully authenticated'); );以上是关于[Mongoose]如何在 app.js 中使用两个不同的模式两次使用相同的模型的主要内容,如果未能解决你的问题,请参考以下文章
如何让 node.js 使用 mongoose 连接到 mongolab
运行 app.js 时出现 Nodejs-mongoose-0.0.5 错误
运行 app.js 时出现 Nodejs-mongoose-0.0.5 错误