首页 > 解决方案 > Node.js 忽略站点根目录的获取处理程序

问题描述

我有一个 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');
    }

})

我在网络托管服务上运行它,当我访问我的网站时,例如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 获取处理程序似乎是次优的解决方案. 我该如何解决?

标签: javascriptnode.jsexpress

解决方案


要解决此问题,您可以执行此操作。这会将默认设置为 false。

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

另一种方法是更改​​代码的顺序。放在

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

/get 函数之后。


推荐阅读