我正在使用facebook登录进行简单的webapp。
如果点击了我页面上的facebook登录按钮,
FB.api(
'/me',
'GET',
{"fields":"id,name,birthday,gender"},
function(response) {
$.post('fb_login', response, "json");
}
);
调用,路由器处理'/ fb_login'请求;在路由器中,服务器检查json对象的id已经在其DB中。如果没有,应该调用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();
}
我该如何解决?
答案 0 :(得分:0)
为了帮助调试,您可以像这样修改代码:
// ... 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();
}
答案 1 :(得分:0)
这是一个较旧的问题,但仍然需要一个可靠的答案。我遇到了完全相同的问题,但我想我已经解决了。
如果服务器返回正确的响应,那不是您的问题所在。 jQuery(在浏览器中)将呈现响应,但是您必须告诉它这样做。
这是我正确响应但未呈现的内容:
$("#getsome").click(function() {
$.get("/task/create");
});
这就是我如何渲染它的方式:
$("#getsome").click(function() {
$.get("/task/create", function( data ) {
document.write(data);
});
});
请注意,您可能不需要像我一样替换整个 DOM。
参考文献: