Sails 1.0无法访问自动生成的关联实体路线

时间:2019-05-16 09:36:45

标签: sails.js one-to-many waterline apiblueprint

我在“客户”和“预算”之间有如下关联:

//Client.js
module.exports = {
  primaryKey: 'id',

  attributes: {
    id: {
      type: 'number',
      unique: true,
      autoIncrement: true
    },
    name: {
      type: 'string'
    },
    phone: {
      type: 'string',
      unique: true
    },
    email: {
      type: 'string',
      unique: true
    },
    budgets: {
      collection: 'budget',
      via: 'client'
    },
  }
};


// Budget.js
module.exports = {
  primaryKey: 'id',

  attributes: {
    id: {
      type: 'number',
      unique: true,
      autoIncrement: true
    },
    client: {
      model: 'client'
    },
    budgetItems: {
      type: 'json'
    }
  }
};

因此,POST对这两个实体都起作用,因此我可以创建它们,但是:

 GET /budget/1

返回预算和关联客户的ID。

 GET /budget/1/client

不填充就返回客户端ID(如我在documentation中所见,应填充)。

 GET /client/1

返回客户属性,并且没有与预算相关的字段。

 GET /client/1/budgets

返回404未找到

我正在关注thisthis官方文档

那我可能会想念什么?

我只是生成一个方向关联,并且已经与官方文档和第三方示例进行了比较,我的代码看起来还不错。

谢谢!

更新

我仍在寻找麻烦,如果我使用--silly选项进行航行,则表明存在以下路线:

  

绑定路线::获取/ client /:parentid / budgets政策:本地化
  绑定路径::获取/ client /:parentid / budgets策略:isauth
  绑定路线::获取/ client /:parentid / budgets BLUEPRINT:填充

但是如果我尝试访问则返回404 Not Found,并且控制台显示以下错误,由Sails核心代码的populate.js抛出:

  

verbo:在populate蓝图操作中:指定的父记录(1)   没有budgets

Update2:

使用Sails控制台进行调试我已经看到正确生成了关联。给定Client.findOne({id: 1}).populate('budgets').then((client)=>{console.log(client)}),可打印客户端属性和相关的预算,但在以下情况下仍返回404 Not Found:GET /client/1/budgets

2 个答案:

答案 0 :(得分:1)

我已经创建了快速演示,对我来说似乎工作正常。

对于演示,我使用了帆版本 1.2.2 sails-disk 作为数据库,并且Model属性存在一些细微的差异,如下所示 Client.js

module.exports = {
  attributes: {
    name: {
      type: 'string'
    },
    phone: {
      type: 'string',
      unique: true,
      required: true
    },
    email: {
      type: 'string',
      unique: true,
      required: true
    },
    budgets: {
      collection: 'Budget', // <<== B is capital here
      via: 'client'
    },
  },
};

Budget.js

module.exports = {
  attributes: {
    client: {
      model: 'Client' // <<== C is capital here
    },
    budgetItems: {
      type: 'json'
    }
  },
};

让我知道这是否有帮助

答案 1 :(得分:1)

感谢SailsJS团队,我们已经找到了问题,它与第三方软件包有关,只需要从我的项目中删除它即可。 已警告sails-hook-deep-orm的所有者。我希望有同样问题的人能找到这篇文章。

还是谢谢你!

该问题可用there