редирект относительного пути Express.js идет не так - PullRequest
0 голосов
/ 01 мая 2018

метод перенаправления не работает, как ожидалось. он не может получить страницу с относительным путем. если абсолютно, то это нормально. как https://www.google.com. но когда я помещаю относительный путь index.html так же, как каталог post.html. это не может получить это. из кода, если значением формы ввода является admin, он перенаправит страницу в index.html

Node script

const express = require('express');
const app = express();
const http = require('http').Server(app);
const bodyParser = require('body-parser');

app.use(express.urlencoded({ extended: true }));

app.get('/', (req, res) => res.sendFile(__dirname + '/post.html'));

app.post('/', function(req, res){
    var username = req.body.username;
    if(username == 'admin'){
    res.redirect(__dirname + '/index.html');
    }
    res.end();
});

http.listen(80, function(){
    console.log('Listening on *:80');
    });

HTML скрипт

<!DOCTYPE html>
<html>
<head>
<title>My First Application</title>
</head>
<body>
<form method="post">
<input type="text" placeholder="username" name="username"><br>
<input type="submit">
    </form>
</body>
</html>

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Прежде всего, вам необходимо предоставить клиенту файл index.html, прямо сейчас они могут получить доступ только к post.html.

Для этого вы можете добавить новый маршрут для страницы индекса или использовать express.static() для обслуживания файлов.

Если вы хотите использовать первое решение, добавьте маршрут, подобный следующему:

app.get('/index', (req, res) => res.sendFile(__dirname + '/index.html'));

и затем перенаправить на него в следующем блоке:

app.post('/', function(req, res){
    var username = req.body.username;
    if(username == 'admin'){
      res.redirect('/index');
    }
    res.end();
});

Если вы хотите использовать express.static(), вот как вы это сделаете:

Поместите файлы, к которым клиенты должны получить доступ, в другой каталог (в основном это называется «public») в корневой каталог вашего приложения (где находится Node Script). После этого используйте функцию express.static(), чтобы указать, что Express будет обслуживать каталог как сервер Apache:

app.use(express.static(__dirname + 'public'))

После этого вы можете перенаправить клиентов на /index.html

app.post('/', function(req, res){
    var username = req.body.username;
    if(username == 'admin'){
      res.redirect('/index.html');
    }
    res.end();
});
0 голосов
/ 01 мая 2018
  __dirname + '/index.html'

Это будет что-то вроде:

 "C:/some/crazy/path/index.html"

Теперь это будет отправлено клиенту. И это не может просто получить доступ к вашей локальной файловой системе по проводам по веским причинам Таким образом, вместо перенаправления на определенный файл (не будет работать), просто перенаправьте на URL, размещенный на вашем сервере (подсказка: index.html - это не маршрут):

 res.redirect("/");
0 голосов
/ 01 мая 2018

Я думаю, вы не поняли, как работает redirect. Просто посмотрите документацию expressjs.com # res.redirect . Там вы можете обнаружить, что вы можете использовать метод redirect только для перехода с одного пути на другой.

В любом случае, вы использовали это неправильно.

Этот код не будет работать: res.redirect(__dirname + '/index.html');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...