0

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

为什么帖子不显示?

应用程序.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
4

1 回答 1

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>}而不是=,页面能够正确呈现。我仍然不知道为什么会这样,但至少它现在解决了我的问题。

于 2013-11-03T14:08:11.063 回答