我正在使用node.js,express,body-parser和ejs来处理c9(云端9)。我安装了所有软件包并配置了数据库,并且包含了包含数据的博客集合;但是,当我在浏览器中运行应用程序时,我收到此错误:
错误让我知道“博客”没有定义。但是,我从app.js传递了它
我无法弄清楚为什么index.ejs页面看不到“blogs”变量。 这是我的app.js文件
button2 = tk.Button(self, text="SUBMIT YOUR DETAILS",
command=lambda: self.e_detail)
button2.grid(row=10, column=0, padx=20, pady=20)
index.ejs文件
var bodyParser = require("body-parser");
var mongoose = require("mongoose");
var express = require("express");
var app = express();
//app configuration
mongoose.connect("mongodb://localhost/restful_blog_app");
app.set("view engine", "ejs");
app.use(express.static("public"));
app.use(bodyParser.urlencoded({extended: true}));
//schema
var blogSchema = new mongoose.Schema({
title: String,
image: String,
body: String,
created: {type: Date, default: Date.now}
})
var Blog = mongoose.model("Blog", blogSchema);
Blog.create({
title: "Test Blog",
image: "http://cushingsindogs.com/wp-content/uploads/2018/02/CID-website-Survey-Page.jpg",
body: "Hello this is a blog post!"
})
// RESTFUL ROUTES
app.get("/", function(req, res) {
res.redirect("/blogs")
})
app.get("/blogs", function(req, res) {
Blog.find({}, function(err, blogs) {
if(err) console.log(err)
else {
console.log(blogs);
res.render("index", {blogs: blogs});
}
})
res.render("index")
})
//server listening
app.listen(process.env.PORT, process.env.IP, function() {
console.log("Server Running on port "+process.env.PORT);
});
答案 0 :(得分:0)
删除res.render('index');
。它在Blog.find({}, ...)
完成之前被调用。请注意,Blog.find({}, ...)
是asynchronous。
答案 1 :(得分:0)
所有数据库操作都是异步的。您必须删除res.render("index")
。这不是必需的。