2014-02-15 3 views
0

У меня есть эта переменная 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 для генерации URL, который выглядит как /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

Причина в том, что Blog определяется в асинхронном обратном вызове, поэтому ваш код будет выполнен дополнительно, пока узел ожидает открытия базы данных и, следовательно, пока не будет определен.

Также определение вашего маршрута крайне неэффективно. Вы должны определить route with a parameter: /post/:postID/edit и внутри проверки обратного вызова проверить, существует ли сообщение с данным идентификатором. Это будет выглядеть после этого (обратите внимание, что я не знаю мангуста и написал это после быстрой проверки руководства):

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 
    }); 
}); 
Смежные вопросы