每次调用中间件函数时,如何创建新的用户定义流?

时间:2018-10-03 23:27:08

标签: javascript node.js node-modules

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

0 个答案:

没有答案