在Node JS中管道远程文件以寻找替代方法

问题描述

我正在使用request模块,现在不推荐使用。无需存储在服务器中就可以通过管道传输远程文件。因此,寻找与Node-fetch,GOT,Axios等功能相同的替代解决方案。

import request from 'request';

    (req,res) { 
       return request(`http://files.com/image.jpg`)
            .on('error',(err) => {
              log.error('error fetching img url: %O',err);
              res.status(500).end('error serving this file');
            })
            .on('response',(urlRes) => {
              if (urlRes.statusCode === 304) return;
              urlRes.headers['content-disposition'] = `inline;filename="${slug}"`;
            })
            .pipe(res);
        }

解决方法

我刚刚用node-fetch模块尝试过这种方法,它可以工作。但是,它不会像request模块中那样通过管道传递响应标头。因此,我们需要手动设置所需的标头。

import fetch from 'node-fetch';
(req,res) {
 fetch('http://files.com/image.jpg').then((response) => {
      res.set({
        'content-length': response.headers.get('content-length'),'content-disposition': `inline;filename="${slug}"`,'content-type': response.headers.get('content-type'),})
      response.body.pipe(res);
      response.body.on('error',() => {}) // To handle failure
    });
}