2016-11-06 5 views
0

私のプロジェクトをきれいにするために、オブジェクト内に変数を持つサーバーを配置しようとしています。したがって、すべてを保持するcore.jsファイルを作成しました。サーバー変数と次のようになります。私は私のメインのファイル内にこのファイルを必要とオブジェクトnode.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

コードで上記のようにjsonを初期化すると、すべてが1行の実行行に属しているため、すべてが同時に実行され、1つではありません。

したがって、以下の行はすべて同時に実行され、1つずつ実行されることはありません。

{ 
    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; 
+0

私は最初にもう1つ好きですが、すべては両方の方法でうまくいった。すべてがオブジェクト内で同時に定義されていることを知らなかった... – Donatas

+0

@Donatas、偉大な仲間とちょうどあなたがそれを好きならそれをアップvote:-) – Aruna

関連する問題