2016-11-14 2 views
4

Я занимаюсь синтаксисом ES6 в Node.js. В качестве отправной точки я просто попытался создать простой класс, который настраивает и возвращает сервер 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._server является undefined. Я думал, что ключевое слово this сможет получить доступ к переменным. Я попытался заменить метод доступа this на использование HttpServer._server, но не повезло. Любые советы или советы будут оценены!

Если я совершил глупые ошибки, пожалуйста, простите меня, я не прыгал на поезде ES6 перед этим!

+1

Это потому, что вы проверяете, если 'это ._app' is 'null' - это не сработает, потому что это не null, это' undefined', как 'this._server'. Вы никогда не создаете экземпляр 'express'. Кроме того, вам не нужны эти проверки в конструкторе, просто создайте 'this._app = express()' и 'this._server = http.createServer (this._app);' – Mjh

+0

Ну ладно, это имеет смысл. Как бы я установил их как «null», как я пытался использовать «const globals»? – nickcorin

+0

В конструкторе вы инициализируете их «null» с помощью 'this._app = 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