admin管理员组

文章数量:814879

我正在尝试在express中使用res.sendFile显示html文件

我正在尝试实现一个工作流程,在该流程中,当用户登录时,用户凭证将通过ajax发布到express的其中一条路由中,以检查用户是否存在,如果存在,则express路由将发送将消息“授权”返回给ajax调用,然后调用成功回调,其中另一个ajax调用将标头和数据一起发送到快速路由(/ reroute)。这个快速的/ reroute api尝试将res.redirect重定向到另一个路由/ homepage。在/ homepage路由内,我尝试使用res.sendfile显示html文件,而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");
        }
    }
})

})

我的快速路线(/重新路线)

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;
回答如下:

您正在使用Ajax请求URL。

浏览器要求输入/reroute并重定向到/homepage

然后它要求/homepage并获取HTML文档。

[将HTML文档传递给JavaScript引擎,然后jQuery尝试将其解析为JSON(由于您说了Content-Type,它忽略了dataType: "JSON")和错误。


如果要使用Ajax进行此操作,请不要重定向。返回一些JSON,告诉您的代码登录成功。然后,您可以使用客户端JS和location对象进行导航。

如果要重定向,则使用常规表单提交而不是Ajax。

本文标签: 我正在尝试在express中使用ressendFile显示html文件