任何方式来提供静态html文件,而没有扩展名?

我想提供一个html文件,而不指定它的扩展名。 有没有什么办法可以做到这一点,而不需要定义路线? 例如,而不是

/helloworld.html 

我只想做

  /helloworld 

快速解决scheme是将.html附加到没有句点的请求,并且在公用目录中存在一个HTML文件:

 var fs = require('fs'); var publicdir = __dirname + '/public'; app.use(function(req, res, next) { if (req.path.indexOf('.') === -1) { var file = publicdir + req.path + '.html'; fs.exists(file, function(exists) { if (exists) req.url += '.html'; next(); }); } else next(); }); app.use(express.static(publicdir)); 

你可以在express.static方法中使用扩展选项。

 app.use(express.static(path.join(__dirname, 'public'),{index:false,extensions:['html']})); 

虽然罗伯特的答案更优雅,但还有另外一种方法可以做到这一点。 我只是为了完整而添加这个答案。 要提供没有扩展名的静态文件,您可以创build一个文件夹,其中包含您要服务的路由的名称,然后在其中创build一个index.html文件。

以我自己的例子,如果我想在/hello hello.html 。 我会创build一个名为hello的目录,并在其中放置一个index.html文件。 现在,当“/ hello”被调用时,express会自动提供这个文件,而不用扩展名。

有一点很明显,因为这是所有的Web框架支持,但我错过了当时。

如果你想像我一样去做一个相反的方式(为html提供一个名为“helloworld”的html文件),这是我使用的中间件。

 var express = require('express'); var app = express(); app.use(function(req, res, next) { if (req.path.indexOf('.') === -1) { res.setHeader('Content-Type', 'text/html'); } next(); }); app.use('/', express.static(__dirname + '/public')); app.listen(8080, function () { console.log('App listening on port 8080!'); })