使用Node的st模块提供index.html

时间:2014-01-02 19:24:56

标签: node.js express connect static-files st

简而言之:当我访问st时,如何让index.html提供/

我正在使用Express中的st module(或Connect,无关紧要)。这是我的全部代码:

var st = require('st');
var path = require('path');
var connect = require('connect');

var app = connect();

app.use(st({
  url: '/',
  path: path.resolve(__dirname, 'public'),
  index: 'index.html', // !!! PROBLEM LINE !!!
  cache: false,
  passthrough: true
}));

app.use(function(req, res) {
  res.end('This is not served from the st module.');
});

app.listen(8000, function() { console.log('App started.'); });

当我访问localhost:8000/index.html时,我看到了该文件。当我访问localhost:8000/时,我看到索引HTML。

我为index选项尝试了以下操作,没有运气:

  • index: false
  • index: true
  • index: 'index.html'
  • index: 'public/index.html'
  • index: path.resolve(__dirname, 'public/index.html')

访问st时如何让index.html提供/

3 个答案:

答案 0 :(得分:0)

我实现了一个重定向,例如:

routes['/'] = function(req, res) {
    res.redirect('/index.html');
};

它有效!

答案 1 :(得分:0)

将您的index.html移至目录public。因为st按以下方式处理请求:

 if (u.indexOf(this.url) !== 0) return false

表示您当前访问的网址必须是url设置的选项app.use()的子网址。

在此示例中,您将'/public'映射到'/'。因此,除非您在原始public/index.html文件夹下创建另一个名为public的文件夹并将public放入其中,否则您无法使用index.html

您不能使用../index.html,因为st不允许这样做(您正在访问unmap文件!),您将收到403错误。

如果仍然失败,请尝试其他网络浏览器。我尝试 Chrome 后,但 Firefox 失败了。这可能是由缓存选项引起的。

答案 2 :(得分:0)

此:

st({ 
    path: __dirname + "/web", 
    url:"/", 
    index: "/index.html" 
});

为我工作。但我必须先清除浏览器缓存。