Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 使用req.user对象更新文档_Javascript_Node.js_Express_Mongoose - Fatal编程技术网

Javascript 使用req.user对象更新文档

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

我正在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.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();
});