我有一个程序,我已经减少到几乎没有,但仍然遇到问题,如果我包含 HTML5 视频构造,那么初始路由会被调用两次。
app.js
var express = require('express');
var path = require('path');
var app = express();
app.use(express.json());
app.use(express.static(path.join(__dirname, 'public')));
app.set('port', process.env.PORT || 4107);
app.get('/v/:vkey', function(req, res) {
console.log('-------------- V -------');
console.log(req.url);
console.log(req.params);
res.send('<!DOCTYPE html><html lang="en"><head><link href="/vendor/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"><script src="/vendor/bootstrap/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script></head><body><div id="vidguts"><div class="container-fluid"><div class="card mt-2"><div class="card-header"><h5>Video</h5></div><div class="card-body"><div class="row"><div class="col"><video controls="" width="100%" height="100%" autoplay=""><source src="beach0.mp4" type="video/mp4"></video></div></div></div></div></div></div></body></html>');
});
var server = app.listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
发送的html是(PUG格式,以便于阅读)
doctype html
html(lang="en")
head
link(href="/vendor/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet")
script(src="/vendor/bootstrap/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous")
body
#vidguts
.container-fluid
.card.mt-2
.card-header
h5 Video
.card-body
.row
.col
video(controls width="100%" height="100%" autoplay="")
source(src="beach0.mp4" type="video/mp4")
输出:
Express server listening on port 4107
-------------- V -------
/v/13
{ vkey: '13' }
-------------- V -------
/v/beach0.mp4
{ vkey: 'beach0.mp4' }
因此 Express 以某种方式第二次调用“v”路由,其中 vkey 参数是 HTML5 视频构造上的“src”属性。页面上没有出现视频,只是一个空白的视频屏幕(带有视频控件等......但没有实际视频)。
节点:v16.20.2 快递:v4.19.2
我使用以下方式调用此测试程序:localhost:4107/v/13
据我所知,唯一可能出现错误的地方可能是视频源尝试更新路径:“/beach0.mp4”,这应该可以解决您的问题,该错误可能是由于您的应用程序尝试访问而引起的视频文件和恐慌导致路线被调用两次。