如何从一个控制器访问同一个职位?
我是全栈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 /signup
path首先调用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
导入。
- 节点js / Express js相对path(点或__dirname或没有任何前缀)?
- 节点subprocess:如何拦截SIGINT等信号
- router.post返回错误“undefined不是函数”。使用mongo和express.js
- Expressjs。 从原型函数调用构造函数中的函数时,TypeError
- Node.js https API服务器,但http为静态文件
- Express JS与Supertest和模拟数据库的集成testing
- Node.js / Express – 通过请求/响应对象修改响应模板上下文
- EJS语法错误,无法在MongoDb的浏览器中呈现logging
- 使用JSBarCode创build条形码