我正在尝试创建用于通过用户定义的流发送数据的connect / express中间件:
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
做些什么,但是我仍然需要一种传递参数的方法。