没有扩展名的任何方式从快递服务静态html文件?

时间:2013-06-03 10:52:18

标签: node.js express

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

 /helloworld.html

我想做的只是

 /helloworld

5 个答案:

答案 0 :(得分:45)

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

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

答案 1 :(得分:18)

一个快速的解决方案是将.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));

答案 2 :(得分:4)

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

如果我想在hello.html提供/hello,请使用我自己的示例。我将创建一个名为hello的目录,并在其中放入一个index.html文件。现在当调用'/ hello'时,express将自动提供此文件而不使用扩展名。

有点显而易见,因为所有Web框架都支持它,但我当时错过了它。

答案 3 :(得分: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!');
})

答案 4 :(得分:0)

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

app.use(express.static('public',{extensions:['html']}));