Javascript 使用req.user对象更新文档
我正在node.js中编写一个express应用程序,更新此模型时遇到问题Javascript 使用req.user对象更新文档,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,我正在node.js中编写一个express应用程序,更新此模型时遇到问题 var reviewSchema = new mongoose.Schema({ comment: { type: String, trim: true, max: 200 }, rating: { type: Number, trim: true, max: 10, min: 0 }, user: {type: mongoose.Sche
var reviewSchema = new mongoose.Schema({
comment: {
type: String,
trim: true,
max: 200
},
rating: { type: Number, trim: true, max: 10, min: 0 },
user: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
created: { type: Date, default:Date.now }
});
var eventSchema = new mongoose.Schema({
name: { type: String, trim: true, max: 30 },
venue: { type: String, trim: true, max: 30 },
critic_review: String,
user_reviews: [reviewSchema],
});
这条路线定义如下
app.js
激活此功能
routes/events.js
它应该更新事件模型。下面是玉模板的一部分
views/event.jade
它在localhost上提供以下输出:3000/event
says: test 5 Thu Jul 02 2015 17:51:53 GMT+0100 (GMT Daylight Time)
为了检查{review.user}是否为null或空,我添加了条件控制台日志event.js:line 6,它给出了控制台输出
myname
因此req.user.username是可用的,但如果我尝试$push它,则会出现以下错误:
[错误:无法使尚未添加到数组的子文档无效]
我也试过传球
user : req.session.passport.user
到$push,然后从模板中获取值,但这也不起作用
我花了一些时间查找此错误消息,但找不到任何有用的信息。如果有人能解释这一点,我将非常感激!谢谢你的阅读
编辑
app.js中的passport配置
在app.js中向应用程序公开模型
您是否也验证了Mongo中存在您在模式中定义的模式?我看到了一个模式,但我没有看到您使用Mongoose的模型。为什么您的请求对象中会有一个模型作为req.models.User?@signus我已经更新了我的问题,对于您的最后一个问题,我相信您有req.models.User.method,其中方法是find、findById、Update等。。通过mongoose检索和修改mongoDB。如果我误解了你,我向你道歉。谢谢你的评论!我不太清楚你的意思。你能展示一下你要进口的型号吗?我还认为将模型放入请求对象没有好处,只需自己调用模型即可。我正在通过底部代码将模型顶部代码导入app.js。另外,以这种方式调用模型是因为这里使用的惯例是单独调用模型,即Event.findbyidanddupdate,这会给我带来未定义的错误:最上面的代码是一个模式,而不是一个模型。您需要从模式中创建一个模型,如var reviewModel=mongoose.model'Review',reviewSchema;
says: test 5 Thu Jul 02 2015 17:51:53 GMT+0100 (GMT Daylight Time)
myname
user : req.session.passport.user
var User = require('./models/user');
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
// Registration
app.post('/register', function(req, res) {
User.register(new User({ email: req.body.email, username: req.body.username }), req.body.password, function(err, user) {
if (err) {
console.log(err);
return res.render('register', {info: "Sorry. That email already exists. Try again."});
}
passport.authenticate('local')(req, res, function() {
console.log('Attempting auth');
res.render('profile', { user: user });
//res.redirect('/');
});
});
});
// Login authentication
app.post('/login', passport.authenticate('local'), function(req, res) {
res.redirect('/');
});
// Expose models to app.
app.use(function(req, res, next){
if( !models.Article || !models.User || !models.Event )
return next(new Error('No models.'));
req.models = models;
return next();
});