无法在对象中创建服务器node.js
问题描述:
我试图将我的服务器与其变量放在对象中以保持我的项目清洁,所以我创建了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
可能是什么问题?
答
当你在你的代码中初始化如上所述的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;
一切工作都在两种方式,但我更喜欢第一个。不知道一切都在同一时间定义在对象... – Donatas
@Donatas,伟大的伴侣,只要upvote它,如果你喜欢它:-) – Aruna