2016-11-14 125 views
4

我在Node.js中涉及ES6语法。作为一个起点,我只是尝试创建一个简单的类来配置和返回一个Express服务器 - 不知道这是否是好的或不在生产中。在ES6类中的函数之间共享变量

我无法访问其他函数中的类成员变量。看看下面的代码:

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列车上跳过!

+1

那是因为你如果'这个检查返回任何东西._app'是'null' - 这会失败,因为它不是null,它是'undefined',就像'this._server'一样。你永远不会创建一个'express'的实例。另外,你不需要在构造函数中进行这些检查,只需创建'this._app = express()'和'this._server = http.createServer(this._app);' – Mjh

+0

好吧,这确实有道理。我如何将它们设置为'null'就像我试图用'const globals'做的那样? – nickcorin

+0

在构造函数中,用'this._app = null;'将它们初始化为'null'。 – Mjh

回答

1
  1. 有必要删除检查空

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

} 
+0

这是我愚蠢的错误,我一直在辛辛苦苦做很多工作,所以这只是习惯。我删除了所有的空检查。尽管如此,我仍然在启动函数中得到了一个未定义的this._port错误。 – nickcorin

+0

@nickcorin你创建一个类似于'new HttpServer(3000)'的服务器实例? –

+0

愚蠢的我。我试图使用这样的代码: 'const server = new HttpServer(); server.start(8000);' 感谢您的帮助。这很完美。 – nickcorin