如何在使用node.js提供网页时摆脱.html扩展名?

时间:2013-05-14 03:17:11

标签: html node.js

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

任何帮助都会非常感谢。

3 个答案:

答案 0 :(得分:13)

(我意识到这个问题已经过时了,但在Google搜索结果中显得很高,并且接受的答案不是最佳解决方案。)

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

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

这将提供 pathToBaseFolderOfStaticContent / somePage.html pathToBaseFolderOfStaticContent / 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放到提供静态内容的根文件夹中来解决,并实现+ Costa的解决方案,您可以使用{{1}来引用它在文档的<link>中。

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

答案 1 :(得分:-1)

Favicon问题通常是一个缓存问题。只要你的基本html布局中有这个代码:

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

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

答案 2 :(得分:-2)

我明白了。我查看了这篇文章Render basic HTML view?,它解决了我遇到的问题。

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

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

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