[英]In express.js, res.render() is not working
我正在使用 facebook 登录制作一个简单的 web 应用程序。
如果点击我页面上的 Facebook 登录按钮,
FB.api(
'/me',
'GET',
{"fields":"id,name,birthday,gender"},
function(response) {
$.post('fb_login', response, "json");
}
);
被调用,路由器处理“/fb_login”请求; 在路由器中,服务器检查 json 对象的 id 已经在它的数据库中。 如果没有,则应调用 res.render('signup', ...) 。 然而它没有用。 我已经检查过 res.render() 被调用了,但是页面“signup.jade”没有出现。
这是我的路由器源代码。
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: '1012'
});
/* GET home page. */
router.post('/', function(req, res, next) {
var userid = req.body.id;
if (userid) {
pool.getConnection(function(err, connection) {
if (err) {
console.error('DB Connection error!!');
return;
}
console.log('DB Connection Success!!');
connection.query('use vasket');
connection.query('select count(*) result from user where userID=?',
[userid], function(err, result, field) {
var isAlreadyUser = result[0].result;
console.log(isAlreadyUser);
if (isAlreadyUser == 1) {
req.session.userid = userid;
res.redirect('/');
res.end();
console.log('DB FB Login Success!!');
connection.release();
}
else {
connection.release();
console.log('FIRST TIME!');
//This method was called, but the page rendered didn't
res.render('signup', {id: req.body.id, name: req.body.name, birthday: req.body.birthday, gender: req.body.gender});
}
});
});
} else {
res.redirect('/');
res.end();
}
我该如何解决?
为了帮助调试,也许您可以像这样修改代码:
// ... your code before
else {
connection.release();
console.log('FIRST TIME!');
console.log(req.body);
//This method was called, but the page rendered didn't
res.render(
'signup',
{
id : req.body.id,
name : req.body.name,
birthday: req.body.birthday,
gender : req.body.gender
} ,
function(err, html){
if(err) console.log(err);
console.log(html);
//res.send(html);
// trying same but forcing status
res.status(200).send(html);
}
);
}
});
});
} else {
res.redirect('/');
res.end();
}
这是一个较旧的问题,但仍然需要一个可靠的答案。 我遇到了完全相同的问题,但我想我已经解决了。
如果服务器返回正确的响应,那不是您的问题所在。 jQuery(在浏览器中)将呈现响应,但您必须告诉它这样做。
这是我正确响应但未呈现的内容:
$("#getsome").click(function() {
$.get("/task/create");
});
这是我如何渲染它:
$("#getsome").click(function() {
$.get("/task/create", function( data ) {
document.write(data);
});
});
请注意,您可能不需要像我所做的那样替换整个DOM。
参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.