node.js - nodejs试图让远程文件向用户打开
问题描述
想知道我在这里做错了什么。我想要的只是将我连接的 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
解决方案
您正在尝试.push
在可写流上使用。只有实现Readable接口的流才能调用.push
.
如果您不需要将文件持久保存到磁盘,则没有理由创建 WriteStream。您可以直接通过管道传输到 Expressres
对象:
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);
});
});
推荐阅读
- sql - Reference Parent inside Table
- python-3.x - Does time series forecasting belong to supervised learning? or is it another category of machine learning?
- php - PHP SQLite - Not returning correct count of match
- r - 在 R 中创建或初始化一个空矩阵
- java - Java OutputStream that incrementally processes text
- c++ - Boost 为 ode 集成提供了奇怪的结果
- python - 新的 Python 安装 - Openpyxl 不会导入“工作表”
- d3.js - 如何在具有多个路径的 SVG 中应用 clipPath,而不是剪掉路径之间的区域?
- python - 我需要在 Python 中生成 1000 个唯一的名字
- security - 非组织成员可以利用 Google 客户端 ID 和客户端机密凭据吗?