Javascript 在ES6类中的函数之间共享变量
我正在Node.js中涉猎ES6语法。作为一个起点,我只是尝试创建一个简单的类来配置并返回一个Express服务器——但不确定这在生产环境中是好是坏 我在访问其他函数中的类成员变量时遇到问题。请看下面的代码:Javascript 在ES6类中的函数之间共享变量,javascript,node.js,express,ecmascript-6,Javascript,Node.js,Express,Ecmascript 6,我正在Node.js中涉猎ES6语法。作为一个起点,我只是尝试创建一个简单的类来配置并返回一个Express服务器——但不确定这在生产环境中是好是坏 我在访问其他函数中的类成员变量时遇到问题。请看下面的代码: import express from 'express' import http from 'http' const _server = null const _app = null class HttpServer { constructor (port) {
import express from 'express'
import http from 'http'
const _server = null
const _app = null
class HttpServer {
constructor (port) {
this._port = port;
if (this._app === null) {
this._app = express()
}
if (this._server === null) {
this._server = http.createServer(this._app)
}
return this._server
}
start (callback) {
this._server.listen(this._port, (error) => {
return callback(error)
})
}
}
export default HttpServer
虽然调用start
方法时,我得到一个错误,变量this.\u server
是未定义的。我认为this
关键字可以访问变量。我尝试将此
访问方法替换为使用HttpServer.\u server
但没有成功。任何提示或建议将不胜感激
如果我犯了愚蠢的错误,请原谅我,在此之前我还没有上过ES6列车
有必要删除对null的检查
不需要从构造函数返回任何内容
这是因为您正在检查此应用程序是否为null
-这将失败,因为它不是null,是未定义的,就像此服务器一样。您从不创建express
的实例。此外,您不需要在构造函数中进行这些检查,只需创建this.\u app=express()
和this.\u server=http.createServer(this.\u app)代码>啊,好吧,这是有道理的。我如何将它们都设置为null
,就像我尝试使用常量全局变量那样?在构造函数中,您可以使用将它们初始化为null
。\u app=null
。我删除了空检查&在start
I记录的typeof
端口、应用程序和服务器中。我得到未定义
,函数
和对象
。端口不再设置。这是我愚蠢的错误,我一直在处理单例类,所以这只是习惯。我删除了所有的空检查。我仍然收到一个未定义的错误。\但是在start函数中有一个端口。@nickcorin,你创建了一个服务器实例,比如:newhttpserver(3000)
?愚蠢的我。我试图使用这样的代码:const-server=new-HttpServer();服务器启动(8000)代码>谢谢你的帮助。这太完美了。
class HttpServer {
constructor (port) {
this._port = port
this._app = express()
this._server = http.createServer(this._app)
}
start (callback) {
this._server.listen(this._port, (error) => {
return callback(error)
})
}
}