【问题标题】:Sharing Variables between functions in ES6 Classes在 ES6 类中的函数之间共享变量
【发布时间】:2017-03-27 22:35:40
【问题描述】:

我正在研究 Node.js 中的 ES6 语法。作为一个起点,我只是尝试创建一个简单的类来配置和返回一个 Express 服务器 - 但不确定这在生产中是否好用。

我在访问其他函数中的类成员变量时遇到问题。看看下面的代码:

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._serverundefined。我认为this 关键字可以访问变量。我尝试将this 访问方法替换为使用HttpServer._server,但没有运气。任何提示或建议将不胜感激!

如果我犯了愚蠢的错误,请原谅我,在此之前我没有跳上 ES6 火车!

【问题讨论】:

  • 那是因为您正在检查 this._app 是否为 null - 这将失败,因为它不为空,它是 undefined,就像 this._server。你永远不会创建express 的实例。此外,您不需要在构造函数中进行这些检查,只需创建 this._app = express()this._server = http.createServer(this._app);
  • 啊,好吧,这确实有道理。我如何将它们都设置为null,就像我尝试使用const globals一样?
  • 在构造函数中,您可以使用this._app = null; 将它们初始化为null
  • 我在start 中删除了空检查和我登录typeof 端口、应用程序和服务器。我得到undefinedfunctionobject。不再设置端口。

标签: javascript node.js express ecmascript-6


【解决方案1】:
  1. 需要去掉对null的检查

  2. 构造函数不需要返回任何东西


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)
        })
    }

}

【讨论】:

  • 这是我的愚蠢错误,我一直在使用单例类,所以这只是习惯。我删除了所有的空检查。我仍然在 start 函数中收到 this._port 的未定义错误。
  • @nickcorin 然后创建一个服务器实例,类似于:new HttpServer(3000)?
  • 愚蠢的我。我试图使用这样的代码:const server = new HttpServer(); server.start(8000); 感谢您的帮助。这是完美的。
猜你喜欢
  • 2016-03-25
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多