【发布时间】: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) 然后在前端重定向。所以...这个问题有一些误解,很抱歉...如果您想查看前端代码,请查看小提琴,谢谢您的意见。