23

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

 /helloworld.html

我想做的只是

 /helloworld
4

5 回答 5

67

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

app.use(express.static(path.join(__dirname, 'public'),{index:false,extensions:['html']}));
于 2016-10-23T08:52:56.077 回答
21

一个快速的'n'dirty解决方案是附加.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));
于 2013-06-03T11:17:06.583 回答
4

这一行可以路由公用文件夹中的所有 html 文件扩展名。

app.use(express.static('public',{extensions:['html']}));
于 2021-06-06T07:25:42.400 回答
3

虽然罗伯特的回答更优雅,但还有另一种方法可以做到这一点。为了完整起见,我添加了这个答案。要提供不带扩展名的静态文件,您可以使用要提供服务的路由名称创建一个文件夹,然后index.html在其中创建一个文件。

如果我想hello.html/hello. 我会创建一个名为的目录hello并将 index.html 文件放入其中。现在,当 '/hello' 被调用时,express 将自动提供该文件而无需扩展名。

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

于 2014-05-12T02:40:47.210 回答
1

如果您想像我一样采用相反的方式(将名为“helloworld”的 html 文件作为 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!');
})
于 2017-02-17T20:52:40.693 回答