【问题标题】:How to get rid of .html extension when serving webpages with node.js?使用 node.js 提供网页时如何摆脱 .html 扩展名?
【发布时间】:2013-05-08 05:23:07
【问题描述】:

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

任何帮助将非常感谢。

【问题讨论】:

标签: html node.js


【解决方案1】:

我想通了。我看了这篇 Render basic HTML view? 的帖子,它解决了我遇到的问题。

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

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

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

【讨论】:

  • 我很确定您也可以删除上面代码中的 .html。
  • 你需要有.html,至少当我把它拿走时它没有为我加载并且它出错了。
  • 这可以正常工作,但是当您有很多页面时它不能很好地扩展。因此,更好的方法是使用 express.static 中间件(见我上面的回答)。
【解决方案2】:

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

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

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

【讨论】:

  • 我强烈推荐这里的 express.js 视频:youtube.com/watch?v=eD2I0zAjM5g 巨大、巨大、巨大的帮助,因为我的脚湿透了,需要认真掌握框架。
  • 是的,网站图标已通过从缓存中删除来修复。
【解决方案3】:

(我意识到这个问题很老了,但它在 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 what is the common way to associate a default file extension with static content requests? 也回答了这个问题。

favicon.ico 问题可以通过将您的 favicon 放到您提供静态内容的根文件夹中来解决,并在您使用 &lt;link&gt; 引用它的地方实施 +Costa 的解决方案您的文档的&lt;head&gt;

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

【讨论】:

  • 如果我的 http 服务器配置在默认端口 80 上,js 脚本将如何工作?我的理解是我需要在端口 80 上运行 express app.listen,例如 app.listen(80),但是可以以非 root 用户身份运行该节点应用程序吗?还是有其他方法?
  • 还是反向代理是唯一的解决方案?
  • 嗨@Annjawn - 我作为服务运行以允许我的应用程序监听端口 80 和 443。我写了一篇文章来描述 Ubuntu 上的设置:arcade.ly/blog/2017/01/21/…。希望对您有所帮助。
  • 当然,现实情况是它仍然以 root 身份运行。您可能会在 Server Fault 上发现以下内容很有帮助:serverfault.com/questions/112795/…。它描述了如何进行端口重定向,因此您可以将端口 80 的流量重定向到端口 8080,您可以在没有 root 的情况下进行监听。
  • 好的理解。我的开发服务器受到限制,所以我没有 root 访问权限来在端口 80 上运行 express,所以我选择了更高的端口。但后来我遇到了allow-access-control-origin 问题,即使它是同一个应用程序服务器。我猜是因为端口号不同。但这在 Node 应用程序中使用 CORS 解决起来相当简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多