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

使用node.js提供网页时,如何摆脱.html扩展名?,html,node.js,Html,Node.js,我是node.js的初学者,正在使用带有ejs布局的express,我想知道在创建页面时如何去掉.html扩展名。例如,如果我转到我的localhost:3000/about.html,它可以工作,但我希望它显示为just/about。此外,如果有人知道如何快速改变默认值,那么就很难弄清楚如何改变默认值 任何帮助都很好,谢谢。我想出来了。我看了这篇文章,它解决了我遇到的问题 app.engine('html', require('ejs').renderFile); app.get('

我是node.js的初学者,正在使用带有ejs布局的express,我想知道在创建页面时如何去掉.html扩展名。例如,如果我转到我的localhost:3000/about.html,它可以工作,但我希望它显示为just/about。此外,如果有人知道如何快速改变默认值,那么就很难弄清楚如何改变默认值


任何帮助都很好,谢谢。

我想出来了。我看了这篇文章,它解决了我遇到的问题

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

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

所有这些都会放在app.js或您正在运行的任何文件中

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

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

然后在浏览器中导航到该图像所在的位置,这将强制更新缓存。

(我知道这个问题很老,但它在谷歌搜索结果中出现得很高,而公认的答案并不是最佳解决方案。)

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

app.use(express.static(pathToBaseFolderOfStaticContent, {
    extensions: ['html', 'htm'],
    ... // Other options here
}));
这将提供pathToBaseFolderOfStaticContent/somePage.html或pathToBaseFolderOfStaticContent/somePage.htm,以响应您想要的GET请求。例如,如果您访问,它提供的文件只是一个名为star-castle.html的静态文件。我不必为这个文件或任何其他静态文件添加任何特殊路由,所有这些都由express.static处理

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

显然,您可以根据需要配置任意多个默认文件扩展名,尽管我倾向于缩短列表。我只在URL可能出现在地址栏中的资源中使用它,地址栏通常指HTML文件,尽管并不总是这样

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

  • (express.static文档位于顶部)
这一点也得到了回答

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


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

哦,对不起,我仍然不知道如何更改索引页。您需要设置应用程序的路由,请看,我很确定您也可以删除上面代码中的.html。您需要有.html,至少当我把它拿走的时候,它没有为我加载,它出错了。这可以正常工作,但是当你有很多页面的时候,它不能很好地伸缩。因此,更好的方法是使用express.static中间件(参见上面的答案)。我强烈推荐这里的express.js视频:在我全身湿透,需要认真掌握框架后,给我巨大、巨大、巨大的帮助。是的,favicon已通过从缓存中删除来修复。如果在默认端口80上配置了http服务器,js脚本将如何工作?我的理解是,我需要在端口80上运行express
app.listen
,就像
app.listen(80)
一样,但是可以作为非root用户运行该节点应用程序吗?或者有其他方法吗?或者反向代理是唯一的解决方案吗?嗨@Annjawn-我作为服务运行,允许我的应用程序在端口80和443上侦听。我写了一篇文章来描述Ubuntu上的设置:。希望这会有所帮助。当然,现实是这仍然是根运行。您可能会发现以下关于服务器故障的信息很有用:。它描述了如何进行端口重定向,这样您就可以将端口80通信重定向到端口8080,在那里您可以在不被root.OK理解的情况下进行侦听。我的开发服务器有限制,所以我没有根访问权限在端口80上运行express,所以我选择了一个更高的端口。但随后,我遇到了
允许访问控制源
问题,即使它是同一个应用服务器。我想这是因为端口号不同。但使用CORS从节点应用程序内部解决这一问题相当简单。