Can npm request module be used in a .pipe() stream?

1.7k views Asked by At

I am parsing a JSON file using a parsing stream module and would like to stream results to request like this:

var request = require("request")

fs.createReadStream('./data.json')
  .pipe(parser)
  .pipe(streamer)
  .pipe(new KeyFilter({find:"URL"}) )
  .pipe(request)
  .pipe( etc ... )

(Note: KeyFilter is a custom transform that works fine when piping to process.stdout)

I've read the docs and source code. This won't work with 'request' or 'new request()' because the constructor wants a URL.

2

There are 2 answers

0
jdungan On BEST ANSWER

After more research and experimenting I've concluded that request cannot be used in this way. The simple answer is that request creates a readable stream and .pipe() methods expects a writable stream.

I tried several attempts to wrap request in a transform to get by this with no luck. While you can receive the piped url and create a new request, I can't figure out how to reset the pipe callbacks without some truly unnatural bending of the stream pattern. Any thoughts would be appreciated, but I have moved on to using an event in the url stream to kick off a new request(url).pipe(etc) type stream.

1
Pierre Inglebert On

It will work with request.put() as this : yourStream.pipe(request.put('http://example.com/form'))