Как создать новый пользовательский поток каждый раз, когда вызывается моя функция промежуточного программного обеспечения? - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь создать промежуточное программное обеспечение для соединения / экспресса, которое отправляет данные через определенный пользователем поток:

app.use(middleware(user-defined-stream(arg1, arg2)))

, где middleware() - это что-то вроде

function(stream) {
    return function(req, res, next) {
        res.pipe(stream)
        next()
    }
}

Вы, вероятно, заметите проблему: поскольку user-defined-stream() вызывается только один раз app.use(), это будет продолжаться только для одного потока.Как только он закончится, любые будущие запросы вызовут ошибку.

Так что я могу придумать два возможных решения:

1: вместо прямого принятия аргумента потока, принять вызываемый элемент, который возвращает новый поток

app.use(middleware(function() {return user-defined-stream(arg1, arg2)}))

function middleware(streamFactory) {
    return function(req, res, next) {
        res.pipe(streamFactory.call())
        next()
    }
}

2. Обычно используется для переноса вызова промежуточного программного обеспечения в функцию

app.use(function(req, res, next) {
   var middleware = middlewareFactory(user-defined-stream(arg1, arg2))
   middleware(req, res, next)
}

function middlewareFactory(stream) {
    return function(req, res, next) {
        res.pipe(stream)
        next()
    }
}

Ни один из них не выглядит особенно элегантным, ноЯ не могу найти способ обойти эту проблему.Может быть, я мог бы что-то сделать с new, но мне все равно нужен способ передачи аргументов.

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