在express.js中,res.render()不起作用

时间:2015-11-04 12:06:34

标签: javascript node.js express pug

我正在使用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();
}

我该如何解决?

2 个答案:

答案 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。

参考文献: