Node.js игнорирование обработчика get для корня сайта

#javascript #node.js #express

#javascript #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 get handler для каждого из них кажется неоптимальным решением. Как мне это исправить?

Ответ №1:

Чтобы исправить это, вы можете сделать это. При этом значение по умолчанию будет равно false.

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

Другой способ — изменить порядок вашего кода. Поместите

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

после функции / get .