我有一个变量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
});
});
});
你可以想象,这不起作用。我怎样才能解决这个问题?
答案 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
});
});