这次我想使用res.render
来显示数据库更新成功的html。我做了好几次,但这次没有成功。它不是渲染 html 文件,只是显示在 chrome 的控制台上。
我认为这是由于异步问题或重复响应引起的。尝试了很多方法都无法解决,还请高手指点。
该代码与用户付费服务时相关,提高用户等级。
获取访问 token => 验证 => 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 的控制台。
最佳答案
似乎对这些请求的工作原理存在一些误解。我认为你的意图是:
- 浏览器发出 GET 请求,服务器以 HTML 文档响应,浏览器呈现它
- 用户采取行动
- 浏览器发出 POST 请求,服务器以 HTML 文档响应,浏览器呈现它
您在前端开始编码的是另一种方法:
- 您通过 AJAX 发出 POST 请求,服务器以一些 JSON 进行响应,您使用 JavaScript 修改当前文档以让用户知道
关于ajax - Express.js res.render 不重定向,仅显示在控制台中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36261360/