Node.js错误:对象函数没有方法

我刚开始进入node.js,然后在Howtonode ,express和mongod上跟随node.js上的这个很棒的教程。 但是,我似乎得到了一个没有人在评论中评论的错误。 最近的评论大约在一个月前,所以也许代码已经过时了?

问题是,当我访问http://localhost:3000/ ,页面显示Internal Server Error并在terminal,我得到下面的错误消息。 有谁知道发生了什么事?

这里是错误信息:

 TypeError: Object function (){} has no method 'findAll' at Router.<anonymous> (/Users/x/nodejs/howtonode/blog/app.js:30:18) at done (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:250:22) at middleware (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:244:9) at param (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:227:11) at pass (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:232:6) at Router._dispatch (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:255:4) at Object.handle (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:45:10) at next (/Users/x/nodejs/howtonode/blog/node_modules/express/node_modules/connect/lib/http.js:203:15) at Object.handle (/Users/x/nodejs/howtonode/blog/node_modules/stylus/lib/middleware.js:187:7) at next (/Users/x/nodejs/howtonode/blog/node_modules/express/node_modules/connect/lib/http.js:203:15) TypeError: Object function (){} has no method 'findAll' at Router.<anonymous> (/Users/x/nodejs/howtonode/blog/app.js:30:18) at done (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:250:22) at middleware (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:244:9) at param (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:227:11) at pass (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:232:6) at Router._dispatch (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:255:4) at Object.handle (/Users/x/nodejs/howtonode/blog/node_modules/express/lib/router/index.js:45:10) at next (/Users/x/nodejs/howtonode/blog/node_modules/express/node_modules/connect/lib/http.js:203:15) at Object.handle (/Users/x/nodejs/howtonode/blog/node_modules/stylus/lib/middleware.js:187:7) at next (/Users/x/nodejs/howtonode/blog/node_modules/express/node_modules/connect/lib/http.js:203:15) 

app.js

 var express = require('express'); var ArticleProvider = require('./articleprovider-memory').ArticleProvider; 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(require('stylus').middleware({ src: __dirname + '/public' })); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.configure('development', function() { app.use(express.errorHandler({ dumpExceptions: true, showStakc: true })); }); app.configure('production', function() { app.use(express.errorHandler()); }); var articleProvider= new ArticleProvider(); // Routes app.get('/', function(req, res) { ArticleProvider.findAll(function(error, docs) { res.send(docs); }); }); app.listen(3000); 

文章提供商,memory.js

 var articleCounter = 1; ArticleProvider = function(){}; ArticleProvider.prototype.dummyData = []; ArticleProvider.prototype.findAll = function(callback) { callback( null, this.dummyData ) }; ArticleProvider.prototype.findById = function(id, callback) { var result = null; for(var i =0;i<this.dummyData.length;i++) { if( this.dummyData[i]._id == id ) { result = this.dummyData[i]; break; } } callback(null, result); }; ArticleProvider.prototype.save = function(articles, callback) { var article = null; if( typeof(articles.length)=="undefined") articles = [articles]; for( var i =0;i< articles.length;i++ ) { article = articles[i]; article._id = articleCounter++; article.created_at = new Date(); if( article.comments === undefined ) article.comments = []; for(var j =0;j< article.comments.length; j++) { article.comments[j].created_at = new Date(); } this.dummyData[this.dummyData.length]= article; } callback(null, articles); }; /* Lets bootstrap with dummy data */ new ArticleProvider().save([ {title: 'Post one', body: 'Body one', comments:[{author:'Bob', comment:'I love it'}, {author:'Dave', comment:'This is rubbish!'}]}, {title: 'Post two', body: 'Body two'}, {title: 'Post three', body: 'Body three'} ], function(error, articles){}); exports.ArticleProvider = ArticleProvider; 

这是您在app.jsArticleProvider的大小写:

 // Routes app.get('/', function(req, res) { ArticleProvider.findAll(function(error, docs) { res.send(docs); }); }); 

它应该是:

 // Routes app.get('/', function(req, res) { articleProvider .findAll(function(error, docs) { res.send(docs); }); });