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

我是node.js的初学者,并且使用了ejs layout的express,我想知道如何在页面放置时去掉.html扩展名。 例如,如果我去我的本地主机:3000 / about.html – 这工作,但我希望它显示为/只。 另外,如果有人知道如何快速更改表示默认,则无法找出如何更改图标。

任何帮助将是非常感谢。

(我意识到这个问题是旧的,但在Googlesearch结果中显得很高,接受的答案不是最好的解决scheme。)

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

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处理。

我只需要添加特定的路线的内容,需要在服务器上的积极工作返回。 这里有一个很大的优势,就是我可以使用CDNcaching更多的内容(如果我正在运行内部业务应用程序,则可以使用nginx),从而减less我的服务器上的负载。

你可以显然configuration尽可能多的默认文件扩展名,只要你喜欢,虽然我倾向于保持短名单。 我只将它用于URL可能出现在地址栏中的资源,该地址栏通常表示HTML文件,但并不总是如此。

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

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

favicon.ico问题可以通过将您的图标放入您从其提供静态内容的根文件夹中解决,也可以使用文档的<head>中的<link>实现+ Costa的解决scheme。

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

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

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

然后,只需导航到该图像与浏览器的任何位置,这应该强制更新caching。

我想到了。 我看了这个post渲染基本的HTML视图? 解决了我遇到的问题。

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

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