我尝试在节点上使用mongoose / mongodb上的教程,并试图从集合中获取表达式res.send
json文件的问题。
当我尝试访问localhost:3000 / mongodb
时,以下代码产生错误存在数据库和集合。该系列有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
我的代码出了什么问题?我是否错误地设置了该集合?如果我删除此代码,其他一切都有效。
答案 0 :(得分:1)
在您的路线中,您要导入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(...);
);