使用MongoDB支持的ExpressJS创建的博客不显示来自DB的帖子

时间:2013-11-02 12:28:15

标签: mongodb express pug

我用ExpressJS和MongoDB创建了一个非常简单的博客网络应用程序。但索引页面不会呈现我输入数据库的'blogPosts'。它只显示标题为“BL的博客”,下面没有任何帖子。

为什么不显示帖子?

app.js:

//Module dependencies
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

//Mongodb
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/hello-express/');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

//GET
app.get('/', routes.index(db));
app.get('/users', user.list);
app.get('/userlist', routes.userlist(db));
app.get('/newuser', routes.newuser);

//POST
app.post('/adduser', routes.adduser(db));

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

routes / index.js(我只包含了exports.index,因为这是解决这个问题的相关途径):

exports.index = function(db) {
    return function(req, res) {
        var posts = db.get('blogPosts');
        posts.find({}, {}, function(e, docs) {
            res.render('index', {
                "index": docs
            });
        });
    };
};

视图/ index.jade:

extends layout

block content
    h1.
        BL's Blog
    ul
        - each post in index
            li
                h3 = post.title
                p = post.content

1 个答案:

答案 0 :(得分:0)

好的,现在我已经找到了自己问题的答案,感谢 WiredPrairie 的帮助。

第一个问题在于我正在使用的数据库名称。因此,在我的index.js中,应该是:

exports.index = function(db) {
    return function(req, res) {
        var posts = db.get('hello-express'); //Here's the difference.
        posts.find({}, {}, function(e, docs) {
            res.render('index', {
                "index": docs
            });
        });
    };
};

我在app.js中列出了我正在使用名为'hello-express'的数据库,下面这行:

var db = monk('localhost:27017/hello-express/');

因此,正在使用的数据库名称应命名为“hello-express”。

但是,即使这样做,我也无法正确呈现Jade页面。这是由于语法错误(我知道,我是新的。)

extends layout

block content
    h1.
        BL's Blog
    ul
        - each post in index
            li
                h3 #{post.title}
                p #{post.content}

使用#{<var>}代替=,页面能够正常呈现。我仍然不知道为什么会这样,但至少它现在解决了我的问题。