mongoose和节点错误:不能调用未定义的方法“模型”

我尝试了一下关于带节点的mongoose / mongodb的教程,并且陷入了试图从集合中获取express / node来res.send json文档的问题。

当我尝试访问localhost:3000 / mongodb时,下面的代码会产生错误

数据库和集合存在。 collections有3个文件。

app.js

 /** * Module dependencies. */ var express = require('express'); var http = require('http'); var path = require('path'); var mongoose = require('mongoose'); var app = module.exports = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.engine('html', require('hogan-express')); 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'))); mongoose.connect('mongodb://localhost/xkayak'); var schema = new mongoose.Schema({ username: 'string', email: 'string', password: 'string'}); var usercollection = mongoose.model('usercollection', schema); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } require('./routes/index.js'); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

index.js – 路线文件

 var app = require('../app.js'); app.get('/mongodb', function(req, res) { app.mongoose.model('usercollection').find(function(err, usercollection) { res.send(usercollection); }); }); 

产生的错误是:

 500 TypeError: Cannot call method 'model' of undefined 

我的代码有什么问题? 我错误地设置了collections吗? 如果我删除这个代码一切工作。

在您的路线中,您正在导入app 。 问题在这里:

 var app = module.exports = express(); 

这意味着,当你导入app.js你会得到一个express的实例,而不是像你想象的那样,当你做app.mongoose.model...

考虑:

app.js:

 var app = express(); exports.express = app; ... var mongoose = mongo.connect(...); exports.mongoose = mongoose; 

index.js:

 app.express.get( ... app.mongoose.model(...); );