如何确保定义此变量?

时间:2014-02-15 14:03:32

标签: javascript node.js express

我有一个变量Blog这是一个猫鼬模型。它在这里定义:

db.once("open", function(){
    var userSchema = new mongoose.Schema({
        username: String, 
        password: String
    });
    var blogSchema = new mongoose.Schema({
        title: String,
        content: String,
        userId: String
    });
    User = mongoose.model("User", userSchema); 
    Blog = mongoose.model("Blog", blogSchema);
});

我想使用app.get生成一个类似于/post/blogpost_id/edit的网址,所以我尝试这样做:

Blog.find(function (err, posts){
    app.get("/post/" + posts._id + "/edit/", checkAuth, function(req, res){
        res.render("edit.html", {
        pageTitle: "Edit",
        pages: {
            "Log Out": "/logout"
        },
        posts: posts
        });
    });
});

你可以想象,这不起作用。我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

原因是Blog在异步回调中被定义,因此当节点等待数据库被打开时你的代码会被进一步执行,因此不会被定义。

此外,您的路线定义效率极低。您应该定义route with a parameter/post/:postID/edit并在回调内部检查是否存在具有给定ID的帖子。之后会看起来像这样(注意我不知道猫鼬,并在快速检查手册后写了这个):

app.get("/post/:postID/edit/", checkAuth, function (req, res) {
    Blog.find({ _id: req.params.postID }, function (err, posts) {
        if (posts.length == 0) res.send(404, 'Not found');
        else // yadayada
    });
});
相关问题