NodeJS & Express Создание нескольких динамических серверов - PullRequest
0 голосов
/ 12 марта 2019

Я использую nodeJS и Express для динамического создания нескольких простых веб-сервисов.Пока у меня только 2 маленьких класса.Вот мой основной класс, который должен создать N (в данном случае 4) экземпляров класса Service.

    const Service = require('./service')

    serviceArr = new Array()
    var temp
    for(let i = 0; i < 4; i++){
        temp = new Service(8080+i)
        serviceArr[i] = temp
    }

    console.log(serviceArr)

Это класс службы, который создается "N раз"

var express = require("express");
var app = express();


class Service { 
    constructor(inc){
    this.port = inc 
    this.data = inc 
    console.log('Service created on port: ' + this.port)
    app.listen(this.port)
    app.get('/heartbeat', (req, res) => {
        res.send(this.port.toString() + 'testing')
    })

}



}



module.exports = Service

Я хотел бы, чтобы веб-служба просто возвращала номер порта, на котором она работает. Я могу получить доступ к веб-службе со всех портов, однако номер порта, который должен возвращать сервис, всегда равен 8080 .Это журналы консоли, если это помогает

Service created on port: 8080
Service created on port: 8081
Service created on port: 8082
Service created on port: 8083
[ Service { port: 8080, data: 8080 },
  Service { port: 8081, data: 8081 },
  Service { port: 8082, data: 8082 },
  Service { port: 8083, data: 8083 } ]

Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Вы создаете только одно экспресс-приложение (модуль, содержащий класс Service)

Вместо этого создайте новое экспресс-приложение каждый раз, когда создается Служба.В настоящее время все порты используют одно и то же экспресс-приложение, поэтому один и тот же /heartbeat код конечной точки

var express = require("express");

class Service { 
    constructor(inc){
        this.port = inc;
        this.data = inc;
        var app = express();
        console.log('Service created on port: ' + this.port)
        app.listen(this.port)
        app.get('/heartbeat', (req, res) => {
            res.send(this.port.toString() + 'testing')
        })

    }
}


module.exports = Service
0 голосов
/ 12 марта 2019

Область действия this изменяется на область более высокого уровня, когда вы вызываете this.port внутри функции обратного вызова.

Кстати, как уже упоминалось в комментариях, вы, вероятно, захотите использовать собственный модуль кластера или выбрать такой модуль, как pm2, если вы ищете кластерную службу.Они должны избавить вас от головной боли, когда дело доходит до этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...