关于获取请求上的参数的静态资源上的错误404

我正在做一个生物医学网站与node.js,我遇到了一个问题:在我的app.js(服务器文件),我有这些代码

app.get('/disease/:orphanetID', function(req, res) { var orphanetID=req.params.orphanetID; res.render('pages/disease.ejs', {activetitle: "views"}); }); 

问题是疾病所需的所有静态资源都会得到404错误。

例如,这个代码在disease.ejs中:

 <script src="static/js/DOMscripts.js"></script> 

在Chrome控制台中,我看到:

 (red cross) GET http://localhost:8080/disease/static/js/DOMscripts.js 

事情是,我的静态资源是在http:// localhost:8080 /静态/ js / DOMscripts.js ,只有string“疾病”在URL中出现…这不是一个好的URL!

在testing了一些东西之后,我发现这个代码正在工作:

 app.get('/disease', function(req, res) { //var orphanetID=req.params.orphanetID; res.render('pages/disease.ejs', {activetitle: "views"}); }); 

所以,如果我没有任何参数,它的工作,但我需要它。

有关信息,我的代码为静态资源是:

 app.use('/static', express.static(__dirname + '/public')); 

我该怎么做一个参数?

改变你的脚本path:

 <script src="/static/js/DOMscripts.js"></script> 

为了解释更多这里发生的事情,当你没有使用///adomain.com/http://adomain.com/启动你的静态资源URL时,浏览器使得这些URL相对于URL这一页。

所以,如果页面的URL是:

 http://adomain.com/disease/194 

并且在页面中有一个资源被指定为:

 static/js/DOMscripts.js 

那么浏览器将通过将页面的path与资源的相对URL组合起来从服务器请求一个URL,以便您得到以下请求:

 http://adomain.com/disease/static/js/DOMscripts.js 

但是,你的服务器并不期待这一点。 您的服务器正在等待:

 http://adomain.com/static/js/DOMscripts.js 

所以,要解决你的url是以/开头的。 这使得它仅仅相对于页面的域而不是页面的path,并且浏览器将请求你期望的资源的URL。