管道superagent响应表达反应

时间:2016-07-20 09:56:30

标签: node.js express superagent

我正在尝试使用快速应用程序“代理”某个文件。为什么下面的代码不起作用?

string input = "AAAA000343BBB343";
string[] result = Regex.Matches(input, @"[a-zA-Z]+|\d+")
                       .Cast<Match>()
                       .Select(x => x.Value)
                       .ToArray(); //"AAAA" "000343" "BBB" "343"

当我直接“忘记”文件时,它可以工作:

var app = require('express')()
var request = require('superagent')
app.get('/image', function(req, res, next) {
  request('http://s3.amazonaws.com/thumbnails.illustrationsource.com/huge.104.520060.JPG')
    .then(function(_res) {
      _res.pipe(res)
    })
})

app.listen(3001, function() {
  console.log('listen')
})

当我调用我的enpdpoint时,它永远不会完成:

$ wget http://s3.amazonaws.com/thumbnails.illustrationsource.com/huge.104.520060.JPG
--2016-07-20 11:44:33--  http://s3.amazonaws.com/thumbnails.illustrationsource.com/huge.104.520060.JPG
Resolving s3.amazonaws.com... 54.231.120.106
Connecting to s3.amazonaws.com|54.231.120.106|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 21026 (21K) [image/jpeg]
Saving to: 'huge.104.520060.JPG'

huge.104.520060.JPG                           100%[==============================================================================================>]  20.53K  --.-KB/s    in 0.1s

2016-07-20 11:44:34 (203 KB/s) - 'huge.104.520060.JPG' saved [21026/21026]

一些细节:

$ wget localhost:3001/image
--2016-07-20 11:45:00--  http://localhost:3001/image
Resolving localhost... 127.0.0.1, ::1
Connecting to localhost|127.0.0.1|:3001... connected.
HTTP request sent, awaiting response...

2 个答案:

答案 0 :(得分:2)

不应将superagent的响应对象视为流,因为它可能已经是自动序列化的结果(例如,从JSON到JavaScript对象)。 documentation on piping data表示您可以直接将superagent请求传递给流,而不是使用响应对象:

var app = require('express')()
var request = require('superagent')
app.get('/image', function(req, res, next) {
  request('http://s3.amazonaws.com/thumbnails.illustrationsource.com/huge.104.520060.JPG')
    .pipe(res)
})

app.listen(3001, function() {
  console.log('listen')
})

答案 1 :(得分:0)

使用Promises,请按以下方式下载:

const fs = require('fs');
const path = require('path');

const download = (url) => {
    return superagent.get(url)
    .then((response) => {
        const stream = fs.createWriteStream('file.ext');
        return response.pipe(stream);
    });
};
相关问题