Node.js和mongodb TypeError:undefined不是函数
问题描述:
我是node.js和mongodb的新手。我正在使用express和jade来测试我正在编写的应用程序。我已经配置的MongoDB和node.js的,但是当我尝试和检索数据从数据库中,我得到以下错误:TypeError: undefined is not a function
Node.js和mongodb TypeError:undefined不是函数
/Users/apple/Documents/Nodejs/NODE/express_example/node_modules/mongodb/lib/mongodb/connection/base.js:242
throw message;
^
TypeError: undefined is not a function
at commandHandler (/Users/apple/Documents/Nodejs/NODE/express_example/node_modules/mongodb/lib/mongodb/cursor.js:706:16)
at /Users/apple/Documents/Nodejs/NODE/express_example/node_modules/mongodb/lib/mongodb/db.js:1806:9
at Server.Base._callHandler (/Users/apple/Documents/Nodejs/NODE/express_example/node_modules/mongodb/lib/mongodb/connection/base.js:442:41)
at /Users/apple/Documents/Nodejs/NODE/express_example/node_modules/mongodb/lib/mongodb/connection/server.js:485:18
at MongoReply.parseBody (/Users/apple/Documents/Nodejs/NODE/express_example/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
at null.<anonymous> (/Users/apple/Documents/Nodejs/NODE/express_example/node_modules/mongodb/lib/mongodb/connection/server.js:443:20)
at EventEmitter.emit (events.js:95:17)
at null.<anonymous> (/Users/apple/Documents/Nodejs/NODE/express_example/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:191:13)
at EventEmitter.emit (events.js:98:17)
at Socket.<anonymous> (/Users/apple/Documents/Nodejs/NODE/express_example/node_modules/mongodb/lib/mongodb/connection/connection.js:418:22)
这里是我的代码: 这是一种负责获取的用户列表路线数据。
exports.userlist = function(db) {
return function(req, res) {
var collection = db.get('usercollection');
collection.find({},{},function(e,docs){
res.render('userlist', {
"userlist" : docs
});
});
};
};
这里是userlist.jade文件:
extends layout
block content
h1.
User List
ul
each user, i in userlist
li
a(href="mailto:#{user.email}")= user.username
下面是代码,我调用用户列表即app.js
/**
* Module dependencies.
*/
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/nodetest1');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
app.get('/users', user.list);
app.get('/helloworld', routes.helloworld);
app.get('/userlist', routes.userlist(db));
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
答
如果你试图修改find
方法
exports.userlist = function(db) {
return function(req, res) {
var collection = db.get('usercollection');
collection.find().toArray(function(e,docs){
res.render('userlist', {
"userlist" : docs
});
});
};
};
你可以发布鳕鱼你在哪里调用'userlist(...)'? – heinob
heinob,现在就看看吧...... –
老问题,但是我尝试使用findAndModify时遇到过类似的问题。各种驱动程序之间的困惑,我忘了传递回调方法,导致这个错误被抛出。在类似的路线上,可以尝试查找方法的“唯一回调”语法。 – NikhilWanpal