2016-11-06 51 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時,它們都在同一時間執行,而不是一個接一個執行,因爲它們都屬於單行執行。

因此,下面的所有行將在同一時間執行,而不是一個一個執行。

{ 
    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

一切工作都在兩種方式,但我更喜歡第一個。不知道一切都在同一時間定義在對象... – Donatas

+0

@Donatas,偉大的伴侶,只要upvote它,如果你喜歡它:-) – Aruna