如何在Sails.js中访问不同控制器的模型属性?

如何在Sails.js中访问不同控制器的模型属性?,sails.js,sails-mongo,Sails.js,Sails Mongo,我的Sails项目中有两个控制器/模型,分别是俱乐部和会员。一个俱乐部可以有许多会员 我尝试将“俱乐部”的id作为参考id,就像“会员”中的外键一样,这样我就可以使用“会员”中的参考id检索俱乐部的会员。我想在主页上根据会员的俱乐部显示会员。但是,我无法找到将“俱乐部”的id值传递给“会员”控制器的方法。以下是一些代码: Clubs.js module.exports = { attributes: { clubName: { type: 'string',

我的Sails项目中有两个控制器/模型,分别是俱乐部和会员。一个俱乐部可以有许多会员

我尝试将“俱乐部”的id作为参考id,就像“会员”中的外键一样,这样我就可以使用“会员”中的参考id检索俱乐部的会员。我想在主页上根据会员的俱乐部显示会员。但是,我无法找到将“俱乐部”的id值传递给“会员”控制器的方法。以下是一些代码:

Clubs.js

module.exports = {

  attributes: {

    clubName: {
      type: 'string',
    },

    clubDesc: {
      type: 'string',
    },

  },

};
Members.js

module.exports = {

  attributes: {

    memberName: {
      type: 'string',
    },

    clubId: {
      type: 'string',
    },

  },

};
clubcontroller.js

module.exports = {

    list: function(req, res) {

        Clubs.find({}).exec(function(err, club) {
            if(err) {
                res.send(500, {error: 'Database Error'});
            }
            res.view('pages/club-list', {clubs:club});
        });
    },

    add: function(req, res) {
        res.view('pages/club-add');
    },

    create: function(req, res) {
        var clubName = req.body.clubName;
        var clubDesc = req.body.clubDesc;

        Clubs.create({clubName:clubName, clubDesc:clubDesc}).exec(function(err){
            if(err) {
                res.send(500, {error: 'Database Error'});
            }

            res.redirect('/clubs/list');
        });

    },

};
module.exports = {

    list: function(req, res) {

        Members.find({}).exec(function(err, member) {
            if(err) {
                res.send(500, {error: 'Database Error'});
            }
            res.view('pages/member-list', {members:member});
        });
    },

    add: function(req, res) {
        res.view('pages/member-add');
    },

    create: function(req, res) {
        var memberName = req.body.memberName;
        var clubId = req.body.clubId;

        Members.create({memberName:memberName, 
        clubId:clubId}).exec(function(err){
            if(err) {
                res.send(500, {error: 'Database Error'});
            }

            res.redirect('/members/list');
        });

    },

};
MembersController.js

module.exports = {

    list: function(req, res) {

        Clubs.find({}).exec(function(err, club) {
            if(err) {
                res.send(500, {error: 'Database Error'});
            }
            res.view('pages/club-list', {clubs:club});
        });
    },

    add: function(req, res) {
        res.view('pages/club-add');
    },

    create: function(req, res) {
        var clubName = req.body.clubName;
        var clubDesc = req.body.clubDesc;

        Clubs.create({clubName:clubName, clubDesc:clubDesc}).exec(function(err){
            if(err) {
                res.send(500, {error: 'Database Error'});
            }

            res.redirect('/clubs/list');
        });

    },

};
module.exports = {

    list: function(req, res) {

        Members.find({}).exec(function(err, member) {
            if(err) {
                res.send(500, {error: 'Database Error'});
            }
            res.view('pages/member-list', {members:member});
        });
    },

    add: function(req, res) {
        res.view('pages/member-add');
    },

    create: function(req, res) {
        var memberName = req.body.memberName;
        var clubId = req.body.clubId;

        Members.create({memberName:memberName, 
        clubId:clubId}).exec(function(err){
            if(err) {
                res.send(500, {error: 'Database Error'});
            }

            res.redirect('/members/list');
        });

    },

};
routes.js

module.exports.routes = {

  '/': { 
    view: 'pages/homepage',

  },

  '/clubs/list': {
    view: 'pages/club-list',
    controller: 'Clubs',
    action: 'list'
  },

  '/clubs/add': {
    view: 'pages/club-add',
    controller: 'Clubs',
    action: 'add'
  },

  '/clubs/create': {
    controller: 'Clubs',
    action: 'create',
  },

 '/members/list': {
  view: 'pages/member-list',
  controller: 'Members',
  action: 'list'
  },

  '/members/add': {
    view: 'pages/member-add',
    controller: 'Members',
    action: 'add'
  },

  '/members/create': {
    controller: 'Members',
    action: 'create',
  },

};

我对Sails.js真的很陌生,我发现在这个问题上很难获得资源。我不确定我是不是用你们能理解的方式说的。但如果你们需要更多的理解,一定要问更多的细节。提前感谢您。

如果我理解正确,您希望在俱乐部和会员之间建立一对多的关联。以下是在Clubs.js中,您的“许多”中的外观:

attributes: {
    ...
    members: {
        collection: 'Members',
        via: 'club'
    }
}
attributes: {
     ...
     club: {
         model: 'Clubs'
     }
}
然后在Members.js中,您的“许多”:

attributes: {
    ...
    members: {
        collection: 'Members',
        via: 'club'
    }
}
attributes: {
     ...
     club: {
         model: 'Clubs'
     }
}
执行Club.find时,members键将是一个成员ID数组。如果您使用Club.find.populate'member',members键将是一个完全填充的成员对象数组


这与您的问题没有直接关系,因为您是新加入Sails的,所以我在此发表一条评论,为您提供一些关于如何最好地使用该框架的建议。我希望一切顺利

我只是想就如何最好地使用最新的Sails框架提供一些建议。除非特别指示,否则我会确保使用1.0版或更高版本。这方面的一个重大变化是。这意味着每个端点有一个控制器,并且代码更清晰。其次是使用async/await,它支持Sails 1.0及以上版本。同样,您的代码将更干净、更易于阅读,并且在不意外中断服务器进程的情况下更容易处理错误。