Я не могу перенаправить на страницу HTML в Node.js API - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть пара конечных точек API / auth / register и / auth / login и / auth - базовый URL, и у меня есть конечная точка в / register и /login.

Моя структура папок:

enter image description here

Я перенаправляю страницу регистрации из приложения. js, и она работает:

app.get('/', (req, res, next) => {
  res.set({ 'Access-Control-Allow-Origin': '*' })
  return res.redirect('signup.html')
  // res.status(200).send('Yes, working')
})

Но когда я нажимаю кнопку отправки при регистрации страница, это не относится к странице входа. Вот страница регистрации:

<!DOCTYPE html>
<html>
    <head>
        <title>Signup</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        <br>
        <br>
        <br>
        <div class="container" >
            <div class="row">
                <div class="col-md-3">
                </div>
                <div class="col-md-6 main">
                    <form action="/auth/register" method="post">
                        <h1> Signup form </h1>
            <input class="box" type="text" name="firstName" id="firstName" placeholder="Enter your First Name"  required /><br>
            <input class="box" type="text" name="lastName" id="lastName" placeholder="Enter your Last Name"  required /><br>
                        <input class="box" type="email" name="email" id="email" placeholder="Enter your E-Mail " required /><br>
                        <input class="box" type="password" name="password" id="password"  placeholder="Enter your Password " required/><br>
                        <input class="box" type="text" name="role" id="role"  placeholder="Enter your Role " required/><br>
                        <br>
                        <input type="submit" id="submitDetails"  name="submitDetails" value="Submit Your Details" /><br>
                    </form>
                </div>
                <div class="col-md-3">
                </div>
            </div>
        </div>
    </body>
</html>

My / auth / register API

router.post('/register, (req, res, next) => {
res.redirect('signin.html')
//also tried ../public/signin.html
//also tried sendFile but it unable to load css file
})

Так что, похоже, я совершаю ошибку, связанную с путем, потому что, когда я загружаюсь из приложения. js это работает, но когда запускается / auth / register, который находится в папке auth, он не может перенаправить.

1 Ответ

0 голосов
/ 18 апреля 2020
 return res.redirect('signup.html')

 redirect(url)

Вы перенаправляете пользователя на маршрут, поэтому вам нужно передать URL. например:

redirect("/myPage")

Чтобы показать эту конечную точку клиенту, у вас уже должна быть определена эта конечная точка. Но похоже, что вы хотите отправить документ html вместо перенаправления пользователя на другой маршрут. поэтому у вас должно быть:

 res.sendFile("signup.html")

Как только вы напишите этот код, express автоматически найдет папку stati c. поэтому вы уже должны были указать express расположение общедоступных файлов. тогда express будет go внутри папки publi c и внутри папки publi c искать регистрацию. html и отправлять ее.

Вот как вы информируете express о состоянии c расположение файлов.

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

Это означает, что файлы в папке "publi c", находящиеся в каталоге root, являются общедоступными.

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

router.get("/myPage",(req,res)=>{
res.sendFile("signup.html")})

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

при обращении клиента к конечной точке ", myPage", поскольку эта конечная точка не знает о местонахождении папки publi c, ваше приложение выдаст ошибку.

этот код, который вы поместили, имеет другое назначение:

router.post('/register, (req, res, next) => {
res.redirect('signin.html')
//also tried ../public/signin.html
//also tried sendFile but it unable to load css file
})

router.post означает отправку запроса POST в "/ register". Запрос на публикацию - это когда клиент отправляет некоторые данные или отправляет форму конечной точке. Но посещение веб-сайта является запросом GET. Поэтому, если вы хотите отобразить что-то для пользователя, вам нужно использовать router.get().

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