关于get请求的静态ressources参数的错误404

时间:2017-07-27 21:10:54

标签: javascript node.js parameters static routing

我正在使用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/static/js/DOMscripts.js,网址中只出现字符串“疾病”......这不是好网址!

在测试了一些东西后,我发现这段代码正在运行:

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'));

如何获得参数?

2 个答案:

答案 0 :(得分:0)

更改您的脚本路径:

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

答案 1 :(得分:0)

要解释此处发生的更多信息,当您未使用///adomain.com/http://adomain.com/启动静态资源网址时,浏览器会将这些网址设为相对于页面的URL。

因此,如果页面网址为:

http://adomain.com/disease/194

并且您在页面中有一个指定为:

的资源
static/js/DOMscripts.js

然后浏览器将通过将页面路径与资源的相对URL组合来从服务器请求URL,以便您获得以下请求:

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

但是,您的服务器并不期望这样。您的服务器期待:

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

因此,要解决此问题,请使用/开头。这使得它只相对于页面的域,而不是页面的路径,浏览器将请求您期望的资源的URL。