当前位置: 首页 > 面试题库 >

ExpressJS:res.redirect()不能按预期工作?

邓阳伯
2023-03-14
问题内容

我已经为此奋斗了2天,尽我所能用Google搜索和stackoverflow,但是我无法解决。

我正在构建一个简单的节点应用程序(+ Express + Mongoose),其登录页面重定向到主页。这是我的服务器JS代码:

app
    .get('/', (req, res) => {
        console.log("Here we are : root");
        return res.sendfile(__dirname + '/index.html');
    })
    .get('/login', (req, res) => {
        console.log("Here we are : '/login'");
        return res.sendfile(__dirname + '/login.html');
    })
    .post('/credentials', (req, res) => {
        console.log("Here we are : '/credentials'");
        // Some Mongoose / DB validations
        return res.redirect('/');
    });

登录页面向发出POST请求/credentials,在此验证发布的数据。这可行。我可以在Node控制台中看到“我们在这里:’/
credentials’”。

然后是问题:res.redirect无法正常工作。我知道它确实到达了“ /”路线,因为:

  1. 我可以在Node控制台中看到“我们在这里:root”
  2. index.html页面作为响应被发送回浏览器,但未显示在窗口中。 Chrome检查器显示POST请求响应,我可以在检查器中看到HTML代码正在发送到浏览器,但是URL仍然是/ login并且登录页面仍在屏幕上显示。

(编辑)重定向位于Mongoose的回调函数中,它不是同步的(NodeJS应该是同步的)。为了清楚起见,我刚刚删除了Mongoose验证内容。

我尝试添加res.end(),但是不起作用

我努力了

req.method = 'get'; 
res.redirect('/');

res.writeHead(302, {location: '/'});
res.end();

不起作用

我究竟做错了什么?我如何才能真正离开“ /登录”页面,将浏览器重定向到“ /”并显示其收到的HTML代码?

预先感谢您一百万的帮助:)


问题答案:

问题可能不在于后端,而在于前端。如果您使用AJAX发送POST请求,则它是专门为不更改您的URL而设计的。

使用window.location.hrefAJAX的请求后,已经完成(在.done())与所需的路径更新URL,或使用JQuery:$('body').replaceWith(data)当您收到请求的HTML回来。



 类似资料:
  • 问题内容: 根据JavaDoc for ,该函数在比较期间不考虑比例。 现在,我有一个测试用例,看起来像这样: 我希望函数返回的值是10,小数位数为10。打印该值可显示预期的结果。但是该功能似乎并未按照我认为的方式工作。 这里发生了什么? 问题答案: 并 没有 代表0.7。 它代表0.69999999999999999999555910790149937383830547332763671875(

  • 问题内容: 我是否错过了明显痛苦的事情?还是世界上没有人真正使用java.util.BitSet? 以下测试失败: 我真的不清楚,为什么我没有得到长度为2的BitSet和值为10的结果。我偷看了java.util.BitSet的源代码,并且在随意检查时似乎无法对两者进行足够的区分。设置为false且从未设置为任何值… (请注意,在构造函数中显式设置BitSet的大小无效,例如: 问题答案: 人们确

  • 问题内容: 以下Dockerfile: 具有输出: 构建时(docker build命令) 看来RUN cd tmp123没有任何作用 为什么呢? 问题答案: 实际上是预期的。 泊坞窗文件不过是docker run + docker commit的包装器。 与做相同的事情: 每次运行时,都会生成一个新容器,因此pwd为’/’。 如果您愿意,可以在github上打开一个问题,以便向Dockerfil

  • 我试着将一个双精度值四舍五入到小数点后两位: var x=0.68999995 var roundX=round(x*100.0)/100.0 println(roundX)//打印0.69 如果打印值是正确的...但var值不是我期望的,继续0.68999999999999995 我需要双值...不像其他StackOverflow答案那样字符串:(

  • 问题内容: 当使用带点名的名称时,例如:,返回的模块不是,返回的内容几乎都是空的!这里发生了什么? 问题答案: 从python文档上: … 当name变量的形式为package.module时,通常返回顶级包(名称直到第一个点),而不是按名称命名的模块。但是,当给出非空的fromlist参数时,将返回按名称命名的模块。这样做是为了与为不同种类的import语句生成的字节码兼容。使用“ import

  • 问题内容: 我将 Jasmine 和 Karma 一起使用,以测试基于 Angular 构建的应用程序。 我必须测试加载用户数据的服务,并且使用 $ httpBackend 模拟响应。但是,当我运行测试时,出现两个错误: 错误:没有等待刷新的请求! 错误:请求不满意:GET https://api.github.com/users/wilk 模块: 测试: 假设GITHUB_API_URL等于 ‘