(我意识到这个问题很老了,但它在谷歌搜索结果中出现得很高,并且接受的答案并不是最好的解决方案。)
提供静态内容的最佳解决方案快递.js is 表达静态。为了避免在 URL 中指定文件扩展名,您可以使用搜索静态文件时将使用的默认文件扩展名列表来配置它:
app.use(express.static(pathToBaseFolderOfStaticContent, {
extensions: ['html', 'htm'],
... // Other options here
}));
这将服务pathToBaseFolderOfStaticContent/somePage.html or pathToBaseFolderOfStaticContent/somePage.htm响应 GET 请求http://www.example.com/somePage http://www.example.com/somePage,这就是你想要的。例如,如果您访问https://arcade.ly/star-castle https://arcade.ly/star-castle,它提供的文件只是一个名为星堡.html。我不必为此添加任何特殊路由或任何其他静态文件 - 这一切都由表达静态.
我只需要为需要服务器上的活动工作才能返回的内容添加特定路由。这里的一大优势是,我可以使用 CDN 来缓存更多内容(如果我运行内部业务应用程序,则使用 nginx),从而减少服务器上的负载。
显然,您可以根据需要配置任意数量的默认文件扩展名,尽管我倾向于保持列表简短。我仅将其用于 URL 可能出现在地址栏中的资源,这通常意味着 HTML 文件,但并非总是如此。
查看以下有关使用express.js 提供静态内容的文档:
- http://expressjs.com/en/starter/static-files.html http://expressjs.com/en/starter/static-files.html
-
http://expressjs.com/en/4x/api.html http://expressjs.com/en/4x/api.html (the 表达静态文档位于顶部)
这也在在 Express 中,将默认文件扩展名与静态内容请求关联起来的常见方法是什么? https://stackoverflow.com/questions/12987590/in-express-what-is-the-common-way-to-associate-a-default-file-extension-with-sta.
The 图标.ico可以通过将您的网站图标放入提供静态内容的根文件夹中,以及实现 +Costa 的解决方案来解决这个问题,您可以使用<link>
in the <head>
您的文件。
理论上,您不需要将网站图标放在根文件夹中,但实际上,某些浏览器仍然会从网站根目录中请求它,即使它在<head>
您的文档。这会导致虚假的 404 错误,您可以在客户端调试工具(例如 Chrome 开发工具)中看到该错误。