我刚开始尝试使用node&表达,并尝试使用Ajax将各种HTML文件的内容加载到单个网页中。
我希望地址栏中显示的URL反映我服务器上的实际文件结构;例如,当用户点击href="posts/thePost.html"
的链接时,我使用click()
,preventDefault()
和Ajax来加载div中的内容,而不是实际转到该页面,然后{ {1}}和pushState()
使地址栏显示文件的相对路径。我不想使用哈希(window.onpopstate
)符号或查询(#
)或类似的东西,我想要普通的网址。
这样可以正常工作,但是当我刷新页面时,会显示位于URL的文件(即?=
),而不是带有加载内容的posts/thePost.html
。有没有办法使用节点来解决这个问题,可能是通过拦截请求并显示index.html
的内容?我试图搜索这个,但没有运气。
对不起,如果这听起来很混乱。简而言之,我正在寻找的行为是无论刷新网页时地址栏显示的是什么网址,都应该提供index.html
。
答案 0 :(得分:1)
这很容易做到:
function serveIndex(req, res) {
return res.sendfile('index.html');
}
app.get('*', serveIndex);
app.head('*', serveIndex);
您可能希望将其放在其他路线之后,这样您就不会破坏它们。
答案 1 :(得分:0)
var routes = require('./routes/index');
app.use('/',routes);
app.use('/index',routes);
function serveIndex(req, res) {
res.redirect('/');
}
app.get('*', serveIndex);