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(...); );