2015-08-30 123 views
0

我是新來表達並試圖實現基本的登錄功能,但我有點困惑與傳遞數據。我有幾個領域似乎讓我感到困惑。Express req.body爲空。這是做這件事的最好方法嗎?

  1. 我在$scope.formdata對象哪些文章到/登錄存儲的輸入值。有沒有一種方法可以在我的後端快速訪問此對象。

  2. 我不太確定爲什麼req.body在這段代碼中未定義。

    app.get('/success', function(req, res){ 
    //console.log(req.body); 
    res.json(req.user); 
    

    });

這裏的明確後端和角代碼如下:

module.exports = function(app, passport){ 

//index page - main login page 
app.get('/login', function(req, res){ 
    res.render('index.ejs'); 
}); 

app.post('/login', passport.authenticate('local-login', { 
    successRedirect: '/success', 
    failureRedirect: '/failure', 
})); 


app.get('/success', function(req, res){ 
    //console.log(req.body); 
    res.json(req.user); 
}); 

app.get('/failure', function(req, res){ 
    res.send('Failed'); 
}); 

};

$scope.login = function(){ 
    $http.post('/login', $scope.formdata) 
    .success(function (data){ 
     console.log(data); 
    }) 
    .error(function (data){ 
     console.log(data); 
    }); 
} 

成功登錄後,我只是想重定向到一個新的頁面,並顯示「Hello,用戶名」

+0

一個deserialised用戶對象,如果我們的$ HTTP請求後,那麼你應該尋找req.body在app.post代替app.get的 – maddygoround

+0

請求對象應該從post/login狀態傳遞到/ success獲得狀態嗎? –

+0

對不起,我無法理解 – maddygoround

回答

1

您應該使用的體解析中間件,否則你req.body對象將是undefined

實施例:

var app = require('express')(); 
var bodyParser = require('body-parser'); 
var multer = require('multer'); 

app.use(bodyParser.json()); // for parsing application/json 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 
app.use(multer()); // for parsing multipart/form-data 

app.post('/', function (req, res) { 
    console.log(req.body); 
    res.json(req.body); 
}) 

文檔:http://expressjs.com/api.html#req.body

+0

它仍然是空的。 req.body是空的,但res包含一個用戶對象,但是如果我執行res.user則是未定義的。爲什麼是這樣? –

2

除了上述答案,護照不會在req.body對象傳遞給/success路由。該路由將在成功驗證時被調用,它不會將原始請求主體傳遞給它。從護照的documentation,撥打此功能後,您將有權訪問req.user對象,但不是您最初發布的req.body。也沒有理由:在這一點上,你應該有req.user

app.post('/login', 
    passport.authenticate('local'), 
    function(req, res) { 
    // If this function gets called, authentication was successful. 
    // `req.user` contains the authenticated user. 
    res.redirect('/users/' + req.user.username); 
    }); 
+0

好的,謝謝你,是否有可能/最好的做法來控制從角度的重定向?這不是實現此目的的最佳方式,以便新頁面可以包含h​​ello,username。 –

+0

@TarangHirani假設您的反序列化的用戶對象包含該信息,您可以在成功重定向自己上執行「用戶先生X」。請記住,在調用/成功後,您可以訪問'req.user'對象來獲取此信息。或者,您可能應該將此與快速會話中間件結合使用,以便在用戶通過身份驗證後在您的應用中保留這些信息。 –

+0

好的。感謝這一點。我對/ success url中的req和res對象之間的差異有點困惑。他們來自哪裏?你能否給我一些見解?爲什麼他們在這種情況下不同? –