运行node.js应用程序时出错

时间:2018-03-17 05:46:14

标签: node.js express mongoose ejs

我正在使用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);
});

2 个答案:

答案 0 :(得分:0)

删除res.render('index');。它在Blog.find({}, ...)完成之前被调用。请注意,Blog.find({}, ...)asynchronous

答案 1 :(得分:0)

所有数据库操作都是异步的。您必须删除res.render("index")。这不是必需的。