2016-03-28 70 views
1

这次我想用res.render将html显示为数据库更新成功。我做了好几次,但这次不起作用。它不是呈现html文件,只是在chrome的控制台上显示。Express.js res.render不重定向,只显示在控制台中

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

代码与用户付费服务相关,增加用户级别。

获得访问令牌=>验证=> 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的控制台。

+0

FWIW在将视图名称传递给'res时,您不需要添加'.ejs' .render()'。 – mscdex

+1

@mscdex我做到了,因为文件名有点,谢谢。 – Juntae

+3

“它只是发送HTML代码到Chrome的控制台”听起来像问题是在前端而不是后端...这是一个AJAX请求? – swider

回答

1

看起来好像对这些请求的工作方式存在误解。您打算什么我想:

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

什么你已经开始编码的前端是一个替代方法:

  • 您麦ea通过AJAX POST请求,服务器响应一些JSON,您使用JavaScript修改当前文档以让用户知道
  • +0

    是的ajax请求不会呈现,所以我只是通过表单发送它。它为我工作。谢谢。 – Juntae