如何从一个控制器访问同一个职位?

我是全栈networking开发的新手。 现在我遇到了一个问题。 我使用的是mongodb,mongoose,node和express。

我有两个控制器,一个是注册,另一个是configuration文件。

代码注册将是这样的

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'); }); 

点击提交后,我可以在集合中find用户条目。 现在我在configuration文件控制器。

configuration文件的代码:

 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,它输出未定义。 预期的输出应该是注册页面的电子邮件地址,这样当我findfunction的时候,我将会得到正确的具有相同电子邮件地址的条目,并在网页上显示相应的用户名。

我的问题是configuration文件控制器如何从注册控制器访问相同的post信息。

我假设你在Express中使用了一个类似bodyParser的中间件。 否则,您的请求与req.body不会工作。

router.get()请求你没有任何正文。 你可以使用这样的路线:

http://yourdomain.com/api/profile/test@mail.com与:

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

或用params:

http://yourdomain.com/api/profile/?email=test@mail.com与:

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

你所寻找的就是Express中间件。

这里有一篇很棒的文章,在应用层和路由器层面上提供了大量的中间件示例。

在你的情况下,你的Express路由configuration应该如下所示,

 // 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 /signuppath首先调用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'); }) 

这些将生活在你的应用程序path导入的任何文件,例如,我从path../controllers/core.controller导入。