我有一个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处理程序似乎是次优的解决方案。我该怎么解决这个问题?
要解决这个问题,你可以这么做。这会将默认值设置为false。
app.use(express.static(path.resolve('./public'), {
index: false
}));
另一种方法是更改代码的顺序。把
app.use(express.static(path.resolve('./public')));
在/get函数之后。