如何从一个控制器访问另一个控制器?

时间:2017-07-24 01:16:32

标签: javascript node.js mongodb express mongoose

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

我的问题是配置文件控制器如何从注册控制器访问相同的帖子。

2 个答案:

答案 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)=> {
    [...]
}