这里的目标是使用url为我的静态站点(使用nuxtjs生成)提供服务,而不使用斜杠。
我想通过网址foo.html
投放/foo
为此,我使用带静态扩展选项的快速静态
app.use(express.static(__dirname + '/public', { extensions: 'html' }))
除非html文件与文件夹同名,否则工作正常。 让我们考虑一下这个文件树:
foo.html
bar.html
bar/baz.html
/foo
将投放foo.html
/bar/baz
将投放baz.html
但/bar
会重定向到/bar/
我试图以这种方式停用重定向选项:
app.use(express.static(__dirname + '/public', { extensions: 'html', redirect: false }))
现在/bar
不再重定向,但文件bar.html
仍未提供!
Express正在转移到next()
我能够在其他路由之后提供bar.html:
app.use(function(req, res, next) {
var file = __dirname + '/public' + req.path + '.html'
fs.exists(file, function(exists) {
if (exists) res.sendFile(file)
else next()
})
})
但我觉得这不应该是正确的方法,我应该能够用静态服务我的所有文件。
答案 0 :(得分:0)
从Express 4.8.0起,您可以使用res.sendFile来替代express.static。它使用相同的支持代码,并支持相同的功能,例如HTTP缓存支持,内容类型标头等。
const root = path.join(__dirname, '/public');
app.use((req, res, next) => {
const file = req.url + ".html";
fs.exists(path.join(root, file), (exists) =>
exists ? res.sendFile(file, {root}) : next()
);
});