Я пытаюсь создать промежуточное программное обеспечение для соединения / экспресса, которое отправляет данные через определенный пользователем поток:
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
, но мне все равно нужен способ передачи аргументов.