#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 .