Node.js TypeError:Object没有方法get

我试图从核心文件( app.js )中分离服务器启动和其他调用,但是当我尝试运行它时,它发出错误, http.createServer(app).listen(app.get('port'), function(){ ^ TypeError: Object function (){ all code from app.js file } has no method 'get'

这是app.js文件。

 /** * Module dependencies. */ module.exports = function(){ var express = require('express'); var routes = require('./routes'); var path = require('path'); var app = express(); // all environments app.set('port', process.env.PORT || 4000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); 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'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', routes.index); return app; }; 

这是server.js文件。

 var http = require('http'), app = require('./app'); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

使用express@3.4.0

我错过了什么或做错了..请帮助。

你正在向module.exports传递一个函数,所以当你require('./app') module.exports require('./app') ,你需要把它称为一个函数:

 var http = require('http'), app = require('./app')(); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

你没有理由返回一个函数到你的app.js文件中,只是返回express对象:

 var express = require('express'); var app = express(); // ... more variables // ... the rest of your code module.exports = app; 

然后,其余的代码到server.js将正常工作。

请记住, module.exports工作原理类似于“ return ”到CommonJS(因此也是NodeJS)。

见文件 。