2015-11-04 154 views
1

我正在用facebook登錄進行簡單的webapp。在express.js中,res.render()不起作用

如果我的頁面上的Facebook登錄按鈕後,

FB.api(
    '/me', 
     'GET', 
     {"fields":"id,name,birthday,gender"}, 
     function(response) { 
     $.post('fb_login', response, "json"); 
     } 
    ); 

被調用,並且路由器處理'/ fb_login的要求;在路由器中,服務器檢查json對象的id是否已經在其DB中。如果沒有,應調用res.render('註冊',...)。 但它沒有奏效。我已經檢查過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

有你有什麼錯誤?你確定req.body設置了id,name,...嗎? – Anonymous0day

+0

先試試這個:http://stackoverflow.com/questions/15403791/in-express-js-app-render-vs-res-render-whats-the-difference有一個很好的闡述 –

+0

@ Anonymous0day沒有錯誤。我在客戶端響應json對象,並且鍵(id,name,...)是正確的。 –

回答

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(); 
} 
+0

謝謝。但是,只有'console.log(html)'工作,'res.send(html)'似乎不工作。新的觀點沒有顯示......我該怎麼辦? –

+0

嘗試強制狀態,我已經更新了我的答案:'res.status(200).send(html);' – Anonymous0day

相關問題