文件"/>
我正在尝试在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中使用res.sendFile显示html文件
发布评论