无法在对象node.js

时间:2016-11-06 19:57:01

标签: node.js server

我正在尝试将我的服务器及其变量放在一个对象中以保持我的项目干净,所以我创建了core.js文件,该文件包含所有服务器变量,如下所示:

module.exports =
{
    express: require('express'),
    http: require("http"),
    app: this.express(),
    server: this.http.createServer(this.app),
    io: require('socket.io').listen(this.server),

    runServer: function()
    {
        ...........
    }
};

我在主文件中需要这个文件:

var core = require("./server/classes/core");

当我尝试跑步时,我得到了这个错误:

app: this.express(),

          ^

TypeError: this.express is not a function

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

当你在代码中初始化json时,它们都是同时执行而不是一个一个地执行,因为它们都属于单行执行。

因此,以下所有行将同时执行,而不是逐一执行。

{
    express: require('express'),
    http: require("http"),
    app: this.express(),
    server: this.http.createServer(this.app),
    io: require('socket.io').listen(this.server),

    runServer: function()
    {
        ...........
    }
};

因此,在执行第app: this.express()行时,this.express将是未定义的。

最好你可以在一个函数中定义它们并分配给module.exports,如下所示。

function Core() {
   this.express = require('express');
   this.http = require("http");
   this.app = this.express();
   this.server = this.http.createServer(this.app);
   this.io = require('socket.io').listen(this.server);

   .....
}

module.exports = new Core();

另一种选择是将它们直接分配到exports,如下所示。

var express = require('express');
var http = require("http");
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

exports.express = express;
exports.http = http;
exports.app = app;
exports.server = server;
exports.io = io;