【问题标题】:Render a view after post request in Node.js在 Node.js 中发布请求后渲染视图
【发布时间】:2017-04-22 08:44:45
【问题描述】:

我正在通过 ajax 向服务器发送一个 post 请求:

result.ejs

$.ajax({
    type: "POST",
    url: "/result",
    data: { score: score, rank: rank, name: name, email: email, historyLog: historyLog }
  });

我正在接收它并将数据保存到数据库中:

resultController.js

app.post('/result', urlencodedParser, function(req, res) {

      var user = new User({
        name: req.body.name,
        email: req.body.email,
        score: req.body.score,
        rank: req.body.rank,
        historyLog: req.body.historyLog
      });

      user.save(function(err) {
        if (err) throw err;
        console.log('User saved successfully!');

      });


  });

保存后我想渲染一个新视图,但我无法让它工作。 我试过在保存功能之后添加这个:

res.redirect('page'), res.render('page'), 设置标题 html/text

以上都不起作用。有什么建议吗?

【问题讨论】:

    标签: javascript node.js express post routing


    【解决方案1】:

    AJAX 通常恰好在您不想想要导航到其他地方,而是在后台与服务器对话时使用。要仍然按照自己的方式进行操作,请在console.log('User saved successfully!); 之后使用res.send("done"); inside 保存回调,然后将其添加到您的ajax 请求中:

    success: function () { window.location.href = "/page"; }
    

    实现整个过程的一个更简单的方法是使用<form method="post" action="/result"> 并提交它。

    【讨论】:

    • 是的,使用表单会容易得多,但在我的情况下我无法实现它,但是将这个函数添加到 ajax 成功就可以了! +1
    【解决方案2】:

    这可以正常发布。 最好使用表单来发帖。

    app.post('/result', function(req, res) {
    
       new user({
        name: req.body.name,
        email: req.body.email,
        score: req.body.score,
        rank: req.body.rank,
        historyLog: req.body.historyLog
      }).save(function(err,doc) {
        if (err) throw err;
        else { res.render('pagename.ejs'); }
        console.log('User saved successfully!',doc);
       }); });
    

    希望这会对你有所帮助。

    【讨论】:

    • 这个答案不只针对一个人。以后任何人都可以参考这个。所以当你回答时请添加解释
    【解决方案3】:

    如果你想在保存后渲染页面 - 在保存回调中添加它,像这样

    app.post('/result', urlencodedParser, function(req, res) {
    
          var user = new User({
            name: req.body.name,
            email: req.body.email,
            score: req.body.score,
            rank: req.body.rank,
            historyLog: req.body.historyLog
          });
    
          user.save(function(err) {
            if (err) throw err;
            console.log('User saved successfully!');
            res.render('page');//ADD HERE redirect o render
          });
    
    
      });

    【讨论】:

    • 但这会导致渲染新视图吗?浏览器正在通过 AJAX 请求/result,这意味着回复仍然被丢弃,无论它是在何处或如何生成的。
    • 如果您使用 ajax,您需要发送一些信息作为响应(json 或只是状态 200),然后根据此响应在客户端进行重定向(或显示某些内容)
    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多