2017-07-24 31 views
1

我是全新堆棧web開發新手。現在我遇到了一個問題。我正在使用mongodb,貓鼬,節點和快車。如何從一個控制器訪問相同的帖子?

我有兩個控制器,一個是註冊,另一個是配置文件。爲註冊

代碼會是這樣

router.post('/',(req,res,next)=>{ 

    let user = new userProfile(); 
    user.email = req.body.email; 
    user.name = req.body.firstName; 

    user.save((err)=>{ 
     if(err){ 
      return err; 
     } 
    }) 
    res.redirect('/profile'); 
}); 

點擊提交後,我能找到集合中的用戶條目。現在我在配置文件控制器。

的配置文件中的代碼:

router.get('/',(req,res)=>{ 
    console.log(req.body.email); 
    userProfile.find({email: 'yyyy'},(err,user)=>{ 
     if(err) return err; 

    }) 
    res.render('profile/profile'); 
}) 

當我這樣做的console.log,其輸出未定義。預期的輸出應該是註冊頁面的電子郵件地址,這樣當我找到功能時,我將會得到具有相同電子郵件地址的正確條目,並在網頁上顯示相應的用戶名。

我的問題是配置文件控制器如何從註冊控制器訪問相同的帖子信息。

+0

的'req'對象僅作用範圍是「當前請求「,這意味着如果您實際上沒有發送任何請求的」主體「中的任何內容,那麼就沒有任何內容。無論如何,您實際上不會在GET請求中使用「body」。相反,您要麼發送數據在url中,並在請求中匹配爲'router.get('/:email',(req,res)=> {userProfile.findOne({「email」:req.params.email} ...'或者你實際上會使用「會話」並通過它來檢索當前的已認證用戶。也許看[護照](http://passportjs.org/docs)作爲集成身份驗證的一種方式。 –

+0

聽起來您需要在服務器上進行用戶會話,因此一旦用戶在第一次請求中登錄後,第二次請求進入時,您就可以知道它是哪個用戶。 http服務器基本上是無狀態的,因此您不會直接從另一個請求中的一個請求中訪問數據,因爲當第二個請求到達時,第一個請求早已消失。相反,您可以cookie用戶,然後可以使用實現會話對象的代碼來存儲特定用戶的半持久性數據,這些數據可以在將來的請求中訪問。參見[express-session](https://www.npmjs.com/package/express-session)。 – jfriend00

回答

0

我假設您使用Express中的bodyParser等中間件。否則,您的郵政請求req.body將不起作用。

router.get()要求你沒有任何機構。您可以使用這樣的路線:

http://yourdomain.com/api/profile/[email protected]有:

router.get('/profile/:email',(req,res)=>{ 
    console.log(req.query.email); 
    userProfile.find({email: req.query.email},(err,user)=> { 
    [...] 
} 

或使用參數:

http://yourdomain.com/api/profile/[email protected]有:

router.get('/profile/',(req,res)=>{ 
    console.log(req.params.email); 
    userProfile.find({email: req.params.email},(err,user)=> { 
    [...] 
} 
0

你在找什麼叫Express中間件。

這裏有一篇很棒的文章,對應用層和路由器級的中間件舉例進行了深入的解釋。

在你的情況,你的快速路由配置應該看起來像下面

// Controller containing your router.get (signup) and router.post (show profile) code 
var core = require('../controllers/core.controller'); 

app.route('/signup') 
    .post(core.signup, core.showProfile) 

你可以看到,我們已經委派了POST /signup路徑,首先調用core.signup,然後core.showProfile(只如果調用next())。你在原來的職位包括

兩個端點處理程序現在可以像下面這樣,

export.signup = (req,res) => { 
    let user = new userProfile(); 
    user.email = req.body.email; 
    user.name = req.body.firstName; 

    user.save((err)=>{ 
     if(err){ 
      return err; 
     } 
    }) 
    next(); 
}); 

export.showProfile = (req,res) => { 
    console.log(req.body.email); 
    userProfile.find({email: 'yyyy'},(err,user)=>{ 
     if(err) return err; 

    }) 
    res.render('profile/profile'); 
}) 

這些將生活在任何一個文件,你在你的應用程序的路線,例如,我從通道進口的進口../controllers/core.controller

相關問題