2016-03-28 72 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