Я пытаюсь отобразить файл html, используя res.sendFile в express - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь реализовать рабочий процесс, в котором, когда пользователь входит в систему, учетные данные пользователя отправляются на один из маршрутов в express через ajax, чтобы проверить, существует ли пользователь, если пользователь существует, маршрут express отправит сообщение «авторизовано» вызову ajax, а обратный вызов успешного выполнения будет вызван, когда другой вызов ajax отправит заголовок вместе с данными на маршрут express (/ reroute). Этот express / reroute api пытается повторно перенаправить на другой маршрут / домашнюю страницу. Внутри маршрута / homepage я пытаюсь отобразить файл html с помощью res.sendfile, а файл res.sendfile не работает.

мой логин ajax вызов

$(document).on("click", "#login", (e) => {
const email = $('#logemail').val().trim();
const pass = $('#password').val().trim();
$.ajax({
    url: "http://localhost:4000/checkuserexists",
    type: "POST",
    dataType: "JSON",
    data: {
        email: email,
        pass: pass
    },
    success: function(data, textStatus, request) {
        console.log(data)
        if (data.message === "authorised") {
            const token = request.getResponseHeader('access-token');
            localStorage.setItem("access-token", token);
            $.ajax({
                url: "http://localhost:4000/reroute",
                type: "GET",
                dataType: "JSON",
                beforeSend: function(xhr) {
                    xhr.setRequestHeader('access-token', token);
                },
                data: {
                    redirectTo: 'homepage'
                },
                success: function(data) {
                    console.log(data + " from ajax  ")
                }
            })
        } else {
            $('.alertbox').show();
            $('.alertbox').text("User unauthorised");
        }
    }
})

})

мой express маршрут (/ перенаправить)

const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
if (req.header('access-token')) {
    const token = req.header('access-token');
    const redirectTo = req.query.redirectTo;
    if (redirectTo === 'homepage') {
        res.setHeader('access-token', token)
        res.redirect('/homepage')
      }
    }
  })


   module.exports = router;

мой маршрут с домашней страницы

const express = require('express');
const path = require('path');
const token_middleware = require('../middlewares/jwtauth');
const router = express.Router();
router.use(express.static(path.join(__dirname, "../public")))
router.get('/', token_middleware, (req, res) => {
if (req.status === "exists") {
    res.sendFile(path.join(__dirname, "../public/homepage.html"));
} else {
    res.redirect('/');
}
  })
   module.exports = router;

1 Ответ

0 голосов
/ 09 мая 2020

Вы запрашиваете URL с Ajax.

Браузер запрашивает /reroute и получает перенаправление на /homepage.

Затем он запрашивает /homepage и получает документ HTML.

Он передает этот HTML документ механизму JavaScript, а jQuery пытается проанализировать его как JSON (игнорирует Content-Type, потому что вы сказали dataType: "JSON") и ошибки.


Если вы хотите сделать это с помощью Ajax, не перенаправляйте. Верните код JSON, который сообщает вашему коду, что вход в систему был успешным. Затем вы можете перемещаться со стороны клиента JS и объекта location.

Если вы хотите перенаправить, используйте обычную отправку формы, а не Ajax.

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