我的 css 和 js 文件未找到/未在第二条路线下加载。它们首先加载正常。
为什么会这样?
// ********************** INDEX PAGE *******************************************
app.get('/LimeLINE', (req, res) => {
let sTopHtml = fs.readFileSync(__dirname + '/components/top.html', 'utf8')
let sMainHtml = fs.readFileSync(__dirname + '/html/index.html', 'utf8')
let sBottomHtml = fs.readFileSync(__dirname + '/components/bottom.html', 'utf8')
// replace placeholders
sTopHtml = sTopHtml.replace('{{title}}', 'LimeLINE: Get Started')
res.send(sTopHtml + sMainHtml + sBottomHtml)
})
app.get('/LimeLINE/activate/:token', (req, res) => {
let sToken = req.params.token;
if (token === sToken) {
user.activateUser(res, sToken)
}
let sTopHtml = fs.readFileSync(__dirname + '/components/top.html', 'utf8')
let sMainHtml = fs.readFileSync(__dirname + '/html/index.html', 'utf8')
let sBottomHtml = fs.readFileSync(__dirname + '/components/bottom.html', 'utf8')
// replace placeholders
sTopHtml = sTopHtml.replace('{{title}}', 'LimeLINE: Welcome')
sMainHtml = sMainHtml.replace('{{click-trigger}}', 'click-trigger')
res.send(sTopHtml + sMainHtml + sBottomHtml)
})
答案 0 :(得分:2)
您应该避免在将从不同路线提供的模板中使用相对网址。在这种情况下,同一个html是从http://<hostname>/LimeLINE
以及http://<hostname>/LimeLINE/activate/:token
投放的。 ../css/main.css
的相对网址将指向这两种情况下的不同位置。由于浏览器不知道服务器上的目录结构,它只是构造相对于当前url的路径(在地址栏中)。
对于第一种情况,它变为http://hostname/../css/main.css
,与http://hostname/css/main.css
相同;
在第二种情况下,http://<hostname>/LimeLINE/activate/../css/main.css
与http://<hostname>/LimeLINE/css/main.css
相同。
只需更改为绝对网址(或相对于主机网址,以/开头),您的代码就可以正常工作。代替
href="../css/main.css"
使用href="/css/main.css"