2016-11-14 1 views
4

Node.js의 ES6 구문으로 주위를 돌아 다니고 있습니다. 출발점으로, 익스프레스 서버를 구성하고 반환하는 간단한 클래스를 만들려고했는데 이것이 좋은 것인지 아닌지는 확실하지 않습니다.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 키워드가 변수에 액세스 할 수 있다고 생각했습니다. 나는 HttpServer._server을 사용하여 행운을 빕니다 대신 this 접근 방법을 대체하는 시도했다. 모든 팁이나 조언을 부탁드립니다!

어리석은 실수를 저질렀다면, 용서해주십시오. 나는이 전에 ES6 열차에서 뛰어 올라 보지 않았습니다!

+1

에서 아무것도 반환 할 필요가 없습니다 널

  • 에 대한 체크를 제거 할 필요가있다 ._app'는'null'입니다. 이것은 null이 아니기 때문에 실패 할 것이고,'this._server'처럼'undefined'입니다. 'express '의 인스턴스를 생성하지 마십시오. 또한, 생성자에서 그 수표가 필요 없으면'this._app = express()'와'this._server = http.createServer (this._app);를 작성하면된다. – Mjh

  • +0

    아, 그래. 'const globals'를 사용하려고 할 때 어떻게 둘을'null '로 설정합니까? – nickcorin

    +0

    생성자에서'this._app = null; '로'null'로 초기화합니다. – Mjh

    답변

    1
    1. 당신이`이 경우 확인되기 때문이다 생성자


    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

    그건 내 바보 같은 실수 였어. 싱글 톤 수업과 많이 일해 왔어. 그래서 습관 일 뿐이야. 나는 모든 null 검사를 제거했다. 비록 아직도 시작 기능에 this._port에 대한 정의되지 않은 오류가 나타납니다. – nickcorin

    +0

    @nickcorin 그리고 당신은 다음과 같은 서버 인스턴스를 생성합니다 :'new HttpServer (3000)'? –

    +0

    어리석은 나를. 나는 다음과 같은 코드를 사용하려고 시도했다 : 'const server = new HttpServer(); server.start (8000); ' 도움을 주셔서 감사합니다. 이것은 완벽했습니다. – nickcorin

    관련 문제