我是全栈Web开发的新手。现在我遇到了一个问题。我正在使用mongodb,mongoose,node和express。
我有两个控制器,一个是注册,另一个是个人资料。
注册代码将是这样的
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时,它输出undefined。预期输出应该是注册页面的电子邮件地址,这样当我找到功能时,我将获得具有相同电子邮件地址的正确条目,并在网页上显示相应的用户名。
我的问题是配置文件控制器如何从注册控制器访问相同的帖子。
答案 0 :(得分:0)
您正在寻找的是Express Expressware。
这里有一篇很棒的文章,对应用程序级别的大量中间件示例进行了深入的解释。 路由器级。
在您的情况下,您的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
导入。
答案 1 :(得分:0)
我假设你在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)=> {
[...]
}