Javascript Express js服务器给出ERR\u EMPTY\u响应
我正在使用node.js和express.js构建一个应用程序,该应用程序存在严重问题。Javascript Express js服务器给出ERR\u EMPTY\u响应,javascript,node.js,http,express,Javascript,Node.js,Http,Express,我正在使用node.js和express.js构建一个应用程序,该应用程序存在严重问题。 该应用程序将视频转换为mp3。当视频长度小于等于5分钟时,一切正常,http服务器通过下载按钮响应客户端。 但当视频太大时,服务器会过早地关闭连接,因为我使用的是http协议,客户端会重试请求,这一次会在等待一定时间后收到ERR_EMPTY_响应 app.post('/', function(req, res) { var obj_dlConvert = apart_dl_cv.dlCon
该应用程序将视频转换为mp3。当视频长度小于等于5分钟时,一切正常,http服务器通过下载按钮响应客户端。
但当视频太大时,服务器会过早地关闭连接,因为我使用的是http协议,客户端会重试请求,这一次会在等待一定时间后收到ERR_EMPTY_响应
app.post('/', function(req, res) {
var obj_dlConvert = apart_dl_cv.dlConvert(req.body.yt_url,140,apart_dl_cv.generateDir()); //the function that download from youtube and convert
var lien = obj_dlConvert.link;
var dossier = obj_dlConvert.dossier;
var video_stream = obj_dlConvert.streame;
obj_dlConvert.processus.on('end', () =>{
fs.rename(path.join(__dirname,'uploads',dossier,dossier+'.mp3'), path.join(__dirname,'uploads',dossier,'video.mp3'), function(err) {
if (err) {
res.render('dlpage.hbs',{
renameError: true
});
}else res.render('dlpage.hbs',{
dossier: dossier,
fullLink: lien
});
});
}
}
req.on("close", function() {
obj_dlConvert.processus.kill();
obj_dlConvert.processus.on('error', () => {
if (fs.existsSync(path.join(__dirname,'uploads',dossier))){
fse.removeSync(path.join(__dirname,'uploads',dossier));
}
});
});
})) 提供视频不是一次性交易。浏览器和服务器之间发生了握手。当浏览器要求时,服务器需要能够提供“下一个”区块。以下可能被用作灵感:
var fs = require("fs"),
http = require("http"),
url = require("url");
exports.serveVideo = function(req, res, file) {
var range = req.headers.range;
var positions = range.replace(/bytes=/, "").split("-");
var start = parseInt(positions[0], 10);
fs.stat(file, function(err, stats) {
var total = stats.size;
var end = positions[1] ? parseInt(positions[1], 10) : total - 1;
var chunksize = (end - start) + 1;
res.writeHead(206, {
"Content-Range": "bytes " + start + "-" + end + "/" + total,
"Accept-Ranges": "bytes",
"Content-Length": chunksize,
"Content-Type": "video/mp4"
});
var stream = fs.createReadStream(file, { start: start, end: end })
.on("open", function() {
stream.pipe(res);
}).on("error", function(err) {
res.end(err);
});
});
}
一些代码可能会很有用……您还可以添加处理文件实际下载的路由处理程序吗?hi@JeremyThille这是一些代码,感谢您的帮助hi@robertklep,这是它的app.post('/',function(req,res){}谢谢你进来advance@sparpar看起来您正在向转换后的MP3文件呈现URL;哪个Express route正在处理这些URL?