【问题标题】:Express.js res.render not redirecting, just displayed in consoleExpress.js res.render 不重定向,只显示在控制台中
【发布时间】:2016-03-28 21:30:21
【问题描述】:

这次我想用res.render 来显示html作为数据库更新成功。我做了几次,但这次没有用。它不是渲染 html 文件,只是显示在 chrome 的控制台上。

我认为这是由于异步问题或重复响应造成的。我尝试了很多方法,但我无法解决它,所以指针表示赞赏。

该代码与用户付费服务相关,提升用户等级。

获取访问令牌 => 验证 => res.render

app.post('/payment/validate', function(req, res, next){

// Get access token 
request.post({
    url : 'https://payment-company/get/token'
}, function(err, response, body) {
    if(!err & response.statusCode == 200) {
        var result = JSON.parse(body);
        var accessToken = result.response.access_token;

    // Validate payment (compare paid and would be paid)
        request.get({
            headers : { 'Authorization' : accessToken }
            url : 'https://payment-company/find/paymentid'
        }, function (err, response, body) {

            if (!err && response.statusCode == 200){
                var result = JSON.parse(body);

                if (result.response.amount == req.body.price){
                    Members.findOne({id : req.user.id}, function(err, member){

                        // If no problem, update user level
                        member.level = 2;
                        member.save(function(err, result){
                            if (err) return next();

                            res.render('payment.view.result.ejs',
                                {
                                    title : 'Success !',
                                    description : 'level up.'
                                });
                        });
                    });
                } 
            } else {
                ...
            }
        }); 
    }
})
});

抱歉代码冗长我试图缩短代码,在 res.render 之前没问题,res.render 会工作,但它不是显示页面,而是它只是将 html 代码发送到 chrome 的控制台。

【问题讨论】:

  • FWIW 在将视图名称传递给 res.render() 时,您不需要添加 .ejs
  • @mscdex 我这样做是因为文件名有点,谢谢。
  • “它只是将 html 代码发送到 chrome 的控制台”听起来问题出在前端而不是后端...这是 AJAX 请求吗?
  • @swider 是的。这是ajax请求,它是success: function(data){ console.log(data) },对不起错误,但即使我删除success callback问题也是一样的。没有呈现 html,我认为它可能只是函数的响应,而不是整个页面。我保存了小提琴:jsfiddle.net/bexoss/mfdL9z4y
  • 我放弃了,我选择不渲染,只是 sendStatus(200) 然后在前端重定向。所以...这个问题有一些误解,很抱歉...如果您想查看前端代码,请查看小提琴,谢谢您的意见。

标签: ajax node.js express


【解决方案1】:

看起来对这些请求的工作方式有些误解。我认为你的意图:

  1. 浏览器发出 GET 请求,服务器响应 HTML 文档,浏览器呈现它
  2. 用户采取行动
  3. 浏览器发出 POST 请求,服务器响应 HTML 文档,浏览器呈现它

您开始在前端编码的是另一种方法:

  1. 您通过 AJAX 发出 POST 请求,服务器以一些 JSON 响应,您使用 JavaScript 修改当前文档以让用户知道

【讨论】:

  • 是的,ajax 请求不会呈现,所以我只是通过表单发送它。它对我有用。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多