0

我正在尝试创建一个基于 node.js 的网站,我将在其中将信息保存在 mongodb

我的 APP.JS 文件如下

/**
 * Module dependencies.
*/

var express = require('express')
  , routes = require('./routes')
  , mongo = require('mongodb')
  , monk = require('monk');

var db = monk('localhost:27017/nodetest1');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

app.use(function(req,res,next){

  req.db = db;
  next();

});

// Routes

app.get('/', routes.index);
app.get('/helloworld', routes.helloworld);
app.get('/userlist', routes.userlist);

//app.use('/users', users);

app.listen(3000, function(){
    console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});

我在路由目录中的 INDEX.JS 文件如下所示

exports.index = function(req, res){
    res.render('index', { title: 'Express' })
};

exports.helloworld = function(req, res){
    res.render('helloworld', { title: 'Express: Hello World' })
};


exports.userlist = function(req, res){
    var db = req.db;
    var collection = db.get('usercollection');
    collection.find({},{},function(e,docs){
        res.render('userlist',{
            "userlist":docs
        });
    });


    //res.render('userlist', { title: 'Express: User List' })
};

我已经使用命令提示符创建了用户集合

db.usercollection.insert({ "username" : "testuser1", "email" : "testuser1@testdomain.com" })

查询它使用

db.usercollection.find().pretty()

并收到结果为

{
    "_id" : ObjectId("5202b481d2184d390cbf6eca"),
    "username" : "testuser1",
    "email" : "testuser1@testdomain.com"
}

但是当我尝试使用查看此浏览器的输出时

http://localhost:3000/userlist

然后我收到以下错误

500 TypeError: Cannot read property 'get' of undefined at exports.userlist (/var/www/html/node/nodetest1/routes/index.js:17:21)

当我做

var db = req.db;
console.log(db);

然后在控制台上显示未定义,在浏览器上也显示 db 'undefined' 表示APP.JS 中的 db 对象在 ROUTES/INDEX.JS 中不可用

我对所有这些东西都很陌生,所以需要你的帮助。

此致

4

2 回答 2

0

我如何设法消除错误。以下是我更新的 ROUTES/INDEX.JS 文件

var mongo = require('mongodb'),  
  Server = mongo.Server,
  Db = mongo.Db;
var server = new Server('localhost', 27017, {  
  auto_reconnect: true
});

var db = new Db('nodetest1', server);  

exports.index = function(req, res){
    res.render('index', { title: 'Express' })
};

exports.helloworld = function(req, res){
    res.render('helloworld', { title: 'Express: Hello World' })
};


exports.userlist = function(req, res){

    var uc = db.collection('usercollection');

    uc.find({},{},function(e,docs){
        res.render('userlist',{
            "userlist":docs
        });
    });

    //res.render('userlist', { title: 'Express: User List' })

};

我还在 APP.JS 中评论了以下几行

  //, mongo = require('mongodb')
  //, monk = require('monk');

  //var db = monk('localhost:27017/nodetest1');
于 2016-01-08T07:43:04.523 回答
-1

如果您使用的是 Express 4:

所有路由方法都将按照它们出现的顺序添加。你不应该做 app.use(app.router)。这消除了 Express 最常见的问题。

来源https://github.com/strongloop/express/wiki/New-features-in-4.x

所以这可能是你问题的根源。

于 2016-01-07T11:52:53.653 回答