node.js TypeError:Object没有方法get

时间:2014-12-02 13:54:23

标签: javascript node.js

我试图将服务器启动和来自核心文件(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

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

2 个答案:

答案 0 :(得分:3)

您没有理由将函数返回到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)。

请参阅documentation

答案 1 :(得分:2)

您已将某个功能传递给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'));
});