【问题标题】:Node render page after database operation with ajax call使用ajax调用进行数据库操作后的节点渲染页面
【发布时间】:2019-11-17 11:01:42
【问题描述】:

我正在尝试在某些数据库操作完成后呈现页面。如果我进入控制台>网络>预览,它会显示我想要的内容,但不会显示在实际页面上。我做错了什么,仅仅是我使用 ajax 调用的事实吗?

router.get('/', function(req, res) {
    Promise.all([verifylogin(req.query.field1)])
        .then(
            data => {
                res.send(`<h1>something here</h1>`);


            }
        ).catch(
            // Log the rejection reason
            (reason) => {
                console.log('Handle rejected promise (' + reason + ') here.');
                res.redirect(303, '/thank-you');
            });


});

这是在前端调用服务器代码:

$('#login').on("click", () => {
        var email = $('#email').val();
        var password = $('#password').val();
        $.get("/register", {
            field1: email,
            field2: password
        });
    });

我需要使用表单而不是 Ajax 吗?

【问题讨论】:

  • Aritra 的答案有效,但我很好奇为什么 res.redirect 不起作用,因为我想将用户重定向到他们的部分而不是留在 /home。
  • 编辑了答案,理想情况下,如果您想澄清一些事情,您应该在我的答案下方发表评论。

标签: node.js ajax promise


【解决方案1】:

假设路线是正确的(/register 不是/)您收到了&lt;h1&gt;something here&lt;/h1&gt; 响应,但没有在任何地方写入(或没有在任何地方显示)。

$('#login').on("click", () => {
    var email = $('#email').val();
    var password = $('#password').val();
    $.get("/register", {
        field1: email,
        field2: password
    })
    .done(data => { 
        //write somewhere
        $('#someid').html(data);
    });
});

但是您还需要查看catch 部分,它只是重定向到另一个页面。但是你在做 Ajax,所以它会返回重定向的页面内容。

编辑:
为什么重定向不起作用?

假设您想要GET 一个路由,例如/route1 返回一些html。另一个路由是/route2,它在内部重定向到/route1。

那么,如果你 HTTP GET /route2 你认为输出会是什么?它将是route1 的内容。因为内部是重定向到/route1,所以基本上和取/route1的内容是一样的。

我做了一个POC供理解:

app.get('/:id', (req,res)=>{
    if(req.params.id === '2'){
        res.redirect('/3');
    }else{
        res.send(req.params.id || "products");
    }
});

对于这条路线,

fetch('http://host/1').then((d)=>d.text()).then(console.log)  //returns 1
fetch('http://host/3').then((d)=>d.text()).then(console.log)  //returns 3

解决方法: 在您的 catch 块中,您可以返回 url,在 #login 处理程序中,您可以添加 window.location.href = &lt;theurl&gt; 以防出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2021-07-16
    相关资源
    最近更新 更多