nodejs пытается получить удаленный файл для открытия пользователю - PullRequest
0 голосов
/ 03 марта 2020

Интересно, что я здесь делаю неправильно. Все, что я хочу, это чтобы mp3, который я подключил, был загружен для пользователя.

Мое идеальное решение - добавить mp3 в начало.

const express = require('express');
var fs = require('fs');
request = require('request');
const http = require("http");
const https = require("https");

router.get('/a/:url(*)', (req, res) =>{
        res.set({
            "Content-Type": "audio/mp3",
           // 'Transfer-Encoding': 'chunk',
          //  'Content-Disposition': 'attachment'
        });

        const file = fs.createWriteStream("audio.mp3");
        var url = req.params.url.substr(0); 
        console.log(url);




https.get('https://storage.googleapis.com/ad-system/testfolder/OUTOFAREA.mp3', response => {
                response.pipe(file);

            });

https.get(url, response => {
                response.pipe(file);

            });
            file.push(res);
        });
        module.exports = router;

я получаю ошибку

TypeError: file.push is not a function
    at router.get (/root/adstichrplayer/server/routes/podcast.js:131:10)
    at Layer.handle [as handle_request] (/root/node_modules/express/lib/router/layer.js:95:5)
    at next (/root/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/root/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/root/node_modules/express/lib/router/layer.js:95:5)
    at /root/node_modules/express/lib/router/index.js:281:22
    at param (/root/node_modules/express/lib/router/index.js:354:14)
    at param (/root/node_modules/express/lib/router/index.js:365:14)
    at param (/root/node_modules/express/lib/router/index.js:365:14)
    at Function.process_params (/root/node_modules/express/lib/router/index.js:410:3)
    at next (/root/node_modules/express/lib/router/index.js:275:10)
    at Function.handle (/root/node_modules/express/lib/router/index.js:174:3)
    at router (/root/node_modules/express/lib/router/index.js:47:12)
    at Layer.handle [as handle_request] (/root/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/root/node_modules/express/lib/router/index.js:317:13)
    at /root/node_modules/express/lib/router/index.js:284:7

1 Ответ

0 голосов
/ 04 марта 2020

Вы пытаетесь использовать .push в записываемом потоке . Только потоки, которые реализуют интерфейс Readable , могут вызывать .push.

Если вам не нужно специально сохранять файл на диск, нет причин создавать WriteStream. Вы можете подключиться напрямую к Express 'res объекту:

  router.get('/a/:url(*)', (req, res) => {
  res.set({
    'Content-Type': 'audio/mp3',
    // 'Transfer-Encoding': 'chunk',
    //  'Content-Disposition': 'attachment'
  });

  const url = req.params.url.substr(0);
  console.log(url);

  https.get(url, mp3Response => {
    // pipe response from HTTP request to Express res object
    mp3Response.pipe(res);
  });
});


...