提问者:小点点

Node.js忽略站点根目录的get处理程序


我有一个Node.js服务器,它的设置简化如下:

const express = require('express');
const app = express();
const http = require("http");
const path = require('path');
const favicon = require('serve-favicon');

// Files in public are static
app.use(express.static(path.resolve('./public')));
// Serve icon
app.use(favicon(path.resolve('./public', 'Pictures', 'favicon.ico')));

http.createServer(app, function(req, res) {
    res.writeHead(200);
    res.end('Hello world');

}).listen();

app.get('/', function(req, res) {
    let b = someFunction();
    if(b){
       res.redirect('/option/one');
    }
    else{
         res.redirect('option/two');
    }

})

我在一个web托管服务上运行这个程序,当我访问我的网站(例如www.mydomain.com)时,我希望被重定向到mydomain.com/option/one或mydomain.com/option/two。然而,结果却是myDomain.com用我的“公共”目录中的index.html响应,并且没有重定向我。

我发现如果我移除这两条线,就不会发生这种情况

// Files in public are static
app.use(express.static(path.resolve('./public')));
// Serve icon
app.use(favicon(path.resolve('./public', 'Pictures', 'favicon.ico')));

然而,仅仅删除它们并不是一个好的解决方案,因为public包含许多文件(javascript,样式表,html,图片等),这些文件相互要求,并且为每个文件创建一个node.js get处理程序似乎是次优的解决方案。我该怎么解决这个问题?


共1个答案

匿名用户

要解决这个问题,你可以这么做。这会将默认值设置为false。

app.use(express.static(path.resolve('./public'), {
    index: false
}));

另一种方法是更改代码的顺序。把

app.use(express.static(path.resolve('./public')));

在/get函数之后。