You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

res.sendFile()在浏览器中不渲染,请求技术协助排查

登录后无法加载首页的问题解决思路

问题根源

你通过XMLHttpRequest发起首页请求后,没有对返回的HTML内容做渲染处理——浏览器不会自动渲染AJAX请求的响应结果,只会在你主动操作时才会更新页面;而Postman是直接展示响应内容,所以看起来正常,但浏览器里只是完成了请求流程,没有做任何页面更新。另外后端代码还有一处语法错误,可能导致错误无法被捕获。

具体修复方案

1. 替换AJAX请求为页面跳转(推荐方案)

登录成功后直接跳转首页,浏览器会自动加载并渲染页面,符合常规登录后跳转的逻辑:

// 替换原来的req2相关代码
if(this.readyState === 4 && req.status == 200) {
  // 保存token到cookie
  var obj = req.response.token;
  document.cookie = 'user_token=' + obj;
  console.log(document.cookie)

  // 直接跳转到首页,浏览器会自动处理页面渲染
  window.location.href = "http://localhost:4000/homepage";
}

注意:如果后端authorize()中间件是从Cookie中读取token验证,跳转时浏览器会自动携带Cookie,无需手动设置请求头。

2. 处理AJAX响应并渲染HTML(备选方案)

如果必须用AJAX请求首页,需要监听响应并将返回的HTML插入到当前页面:

var req2 = new XMLHttpRequest();
req2.open("GET", "http://localhost:4000/homepage", true);
req2.setRequestHeader("Authorization", 'Bearer ' + obj);

// 添加响应监听,处理返回的HTML
req2.addEventListener("readystatechange", function() {
  if(this.readyState === 4 && req2.status == 200) {
    // 替换当前页面的body内容
    document.body.innerHTML = req2.responseText;
    // 或者替换整个文档(更彻底)
    // document.open();
    // document.write(req2.responseText);
    // document.close();
  }
});
req2.send(); 

3. 修复后端语法错误

res.sendFile的回调函数位置写错了,逗号改为句点才能让错误捕获逻辑生效:

app.use('/homepage', authorize(), (req,res) => {
    res.sendFile('/homepage.html', {root: publicDir}, function(err) { 
        if (err) console.log(err);
    });
});

4. 跨域场景检查(若存在跨域)

如果前端页面域名和后端http://localhost:4000不一致,需确保后端正确配置CORS,允许携带Credentials和Authorization请求头。

内容的提问来源于stack exchange,提问作者jmaneaglefan008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:27:36