节点.js类型错误:对象没有方法获取

node.js TypeError: Object has no method get

本文关键字:有方法 获取 对象 js 类型 错误 节点      更新时间:2023-09-26

我正在尝试将服务器启动和其他调用与核心文件(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

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

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

请参阅文档。

你正在向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'));
});