2016-11-06 3 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, отличная помощница и просто переверните его, если вам это нравится :-) – Aruna