10

我是 node.js 的初学者,并且正在使用 ejs 布局的 express,我想知道如何在放置页面时摆脱 .html 扩展名。例如,如果我访问我的 localhost:3000/about.html - 这可行,但我希望它显示为 /about。此外,如果有人知道如何从快速默认值中快速更改图标,则无法弄清楚如何更改图标。

任何帮助都会非常感谢。

4

3 回答 3

30

(我意识到这个问题很老了,但它在 Google 搜索结果中的排名很高,并且接受的答案并不是最好的解决方案。)

在express.js中提供静态内容的最佳解决方案是express.static。为避免在 URL 中指定文件扩展名,您可以使用默认文件扩展名列表对其进行配置,搜索静态文件时将使用该列表:

app.use(express.static(pathToBaseFolderOfStaticContent, {
    extensions: ['html', 'htm'],
    ... // Other options here
}));

这将提供pathToBaseFolderOfStaticContent/somePage.htmlpathToBaseFolderOfStaticContent/somePage.htm以响应对http://www.example.com/somePage的 GET 请求,这正是您想要的。例如,如果您访问https://arcade.ly/star-castle,它提供的文件只是一个名为star-castle.html的静态文件。我不必为此或任何其他静态文件添加任何特殊路由 - 这一切都由express.static处理。

我只需要为需要在服务器上进行积极工作才能返回的内容添加特定的路由。这里的一大优势是我可以使用 CDN 来缓存我的更多内容(如果我正在运行内部业务线应用程序,则可以使用 nginx),从而减少我的服务器上的负载。

您显然可以根据需要配置尽可能多的默认文件扩展名,尽管我倾向于保持列表简短。我只将它用于 URL 可能出现在地址栏中的资源,这通常意味着 HTML 文件,尽管并非总是如此。

查看以下有关使用 express.js 提供静态内容的文档:

这也在In express 中得到了回答,什么是将默认文件扩展名与静态内容请求相关联的常用方法?.

favicon.ico问题可以通过将您的 favicon 放入您提供静态内容的根文件夹中来解决,以及实施 +Costa 的解决方案,您可以<link><head>文档中使用 a 引用它。

从理论上讲,您不需要将 favicon 放在根文件夹中,但实际上,即使在<head>文档中引用了它,某些浏览器仍会从站点根目录中请求它。这会导致您可以在客户端调试工具(例如,Chrome 开发工具)中看到虚假的 404 错误。

于 2016-06-23T11:52:32.783 回答
-1

Favicon 问题通常是缓存问题。只要您的基本 html 布局中有此代码:

<link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico">

然后只需使用浏览器导航到该图像所在的任何位置,这应该会强制您的缓存更新。

于 2013-05-14T05:16:29.093 回答
-3

我想到了。我看了这篇文章 Render basic HTML view? 这解决了我遇到的问题。

app.engine('html', require('ejs').renderFile);    

app.get('/', function(req, res){
  res.render("index.html");
});

这一切都在 app.js 或您正在运行的任何文件中。

于 2013-05-14T04:05:33.730 回答