我目前正在使用模块through2
,concat-stream
和request
在Node.js中使用流。
我设置了这样的管道链条:
request(process.argv[2])
.pipe(through(write, end))
.pipe(/*And */)
.pipe(/* Some */)
.pipe(/* more */)
.on("finish",function (){ #Do some stuff });
function write(buf, enc, nxt){
/*Push some data after some processing*/
}
function end(done){
done()
}
这是一个静态的管道链。是否有可能通过某种形式的用户输入动态指定管道链?
在伪代码中:
array_of_user_pipes = from_some_input;
pipe_library = {pipe_name:pipe_callback} object, loaded into application logic
perform the url request (fetch .txt file over the internet)
for all pipe in array_of_user_pipes do
fetch pipe from pipe_library (simple key look-up)
chain pipe to chain
execute the (dynamic) pipe chain
答案 0 :(得分:1)
将伪代码转换为js
没有问题const pipesMap = {
pipeName1: require('pipe-module'),
pipeName2: function(){},
...
}
定义一个piper
函数,它接受管道名称并返回一个函数,用于管理每个管道的初始事件流。
const piper = pipes => request =>
pipes.reduce((piped, pipe) => piped.pipe(pipesMap[pipe]), request)
const userInputPipesArray = ['pipeName1', 'pipeName2']
piper(userInputPipesArray)(request(process.argv[2])).on('finish')
修改强>
您可以使用for-loop
执行相同的操作let piped = request(process.argv[2])
for(let pipe of userInputPipesArray) {
piped = piped.pipe(pipeMap[pipe])
}
piped.on('finish', ...)