0

我在我的用户服务中创建了一个 before 挂钩,旨在包含来自组织模型的记录。用户和组织之间的关系是

users.belongsToMany(models.organizations,{through: 'users_to_organizations'});

before 钩子称为 attach-orgnaization.js,看起来像

module.exports = (options = {}) => {
  return async context => {
    const organizations = context.app.services.organizations.Model;
    context.params.sequelize = {
      include: [{model: organizations}]
    };
    return context;
  };
};

它像这样在 users.hooks.js 中设置

....
const attachOrganization = require('../../hooks/attach-organization');
module.exports = {
  before: {
    all: [],
    find: [ authenticate('jwt') ],
    get: [authenticate('jwt'), attachOrganization()],
....

当我 GET 时,/users?id=1我让用户返回与用户关联的组织 in users_to_organizations,这恰好是 org 3“测试组织”。

我期待在回复中看到更多与组织相关的字段。

相反,我只看到

{
    "total": 1,
    "limit": 10,
    "skip": 0,
    "data": [
        {
            "id": 1,
            "email": "hello@feathersjs.com",
            "googleId": null,
            "githubId": null,
            "createdAt": "2020-04-29T04:26:49.541Z",
            "updatedAt": "2020-04-29T04:26:49.541Z"
        }
    ]
}

单步调试器(pycharm)我可以看到钩子中的代码正在执行。

我猜要么 sequelize 没有看到关系,要么feathers 没有将包含添加到查询中。

我可能会错过什么?

谢谢!

4

1 回答 1

0

在 feathersjs 中,Get 方法有 2 种类型

  1. Get:获取具体数据。例如:GET /user/:id(id 是用户 id)
  2. Find:要使用过滤器获取所有数据,例如:(GET /user?name=xyz它将返回所有名称为 xyz 的文档)

您已attachOrganization()在 get 方法中附加并调用/users?id=1FIND 方法。因此,要么通过/users/1id 1调用它,要么将其_id添加到方法attachOrganization()的钩子中find

于 2020-05-12T05:25:54.347 回答