我正在编写一个带有单页网络应用程序的网站(网站的其余部分只是提供的静态文件)。我正在尝试为 express 编写一个中间件,以将遵循模式“example.com/app”的所有请求重定向到“example.com/app”,以便诸如“example.com/app/my/specific/”之类的请求page/' 都将导致发送相同的页面。这样做的关键问题是浏览器地址栏中的 url 不能更改,以便 javascript 应用程序本身可以解释它并显示正确的内容。
我可以做这样的事情:
app.use( '/app', function ( req, res ) {
res.redirect('/app');
});
但是,这会导致页面的 url 发生变化,并且假定会发出单独的 HTTP 请求。
最明显的替代解决方案是执行以下操作:
app.use( '/app', function ( req, res ) {
res.sendfile(__dirname + '/public/app/index.html');
});
这里的问题是,在“example.com/app/my/specific/page/”之类的请求之后,页面中的资源会出现在错误的位置。例如,如果我在页面上有一个图像,那么它将查找 example.com/app/my/specific/page/image.jpg。由于没有返回图像,因此不会显示在页面上。所有外部脚本或样式表都会发生这种情况。
我也尝试过这样的事情:
app.use( '/app', function ( req, res ) {
res.sendfile(__dirname + '/public/beta' + url.parse(req.url).pathname);
});
但这对我来说很愚蠢,原因很明显。