82-Nodejs课程2023:资源:资源收集
#typescript #node #mongodb #fastify

让我们在这里使用新功能,从单个资源中获取资源的收集(array)。

用例

我们将列出用户,因此我们要获取用户模型,然后循环这些模型,并将每个模型注入UserResource,然后返回资源数组。

我们这里有两种情况,首先,我们需要解析给定的资源,这是一个普通的对象,模型或资源,因此我们可以从中正确收集数据。

其次,要获取资源的收集。

解析资源

我们已经在构造函数中接收了资源,但是现在我们只是将其视为普通对象或只是一个对象,我们正在尝试从中访问一个值。

现在,让我们添加两个新案例,如果资源是模型,那么我们将从中获取数据,如果它是资源,那么我们将从中获取资源。

// src/core/resources/resource.ts
// ...

import { Model } from "core/database";

// ...


export default class Resource {
  // ...
  /**
   * Constructor
   */
  public constructor(protected resource: any = {}) {
    //
    if (this.resource instanceof Model) {
      this.resource = this.resource.data;
    } else if (this.resource instanceof Resource) {
      this.resource = this.resource.resource;
    }
  }
  // ...
}

在构造函数中,我们将检查资源是否是模型,然后将从中获取数据,如果是资源,我们将从中获取资源。

现在让我们添加一种新的静态方法,我们将其称为collect此方法将接收大量数据,无论其类型如何,它将返回一系列资源。

// src/core/resources/resource.ts


import { Model } from "core/database";

// ...


export default class Resource {
  // ...
  /**
   * Constructor
   */
  public constructor(protected resource: any = {}) {
    //
    if (this.resource instanceof Model) {
      this.resource = this.resource.data;
    } else if (this.resource instanceof Resource) {
      this.resource = this.resource.resource;
    }
  }

  /**
   * return list of resources for the given array ouf data
   */
  public static collect(data: any[]) {
    return data.map(item => {
      return new this(item);
    });
  }
  // ...
}

现在我们可以这样使用:

// src/app/users/controllers/users-list.ts
import User from "../models/user";
import UserResource from "../resources/user-resource";

export default async function usersList() {
  const users = await User.list();

  return {
    users: UserResource.collect(users),
  };
}

现在,collect方法将循环遍历所有用户,并为每个用户返回UserResource的新实例。

这里的问题,为什么这是一种静态方法?好吧,因为我们还没有实例,所以我们需要为每个集合项目制作一个实例,因此除了静态方法之外,其他任何东西都没有意义。

- 结论

我们在这里添加了两个简单的功能,第一个是解析资源,它是普通的对象,模型或资源,因此我们可以从中正确收集数据。

第二,要使用我们的静态方法collect获取资源的收集。

我们在本文中做了两件事,我们创建了一个新方法transformValue,它将转换一个值,我们还更新了我们的toJSON方法以使用此新方法,还检查该值是否为数组,如果然后,我们将在它上循环并应用每个项目的转换。

â•给我买一杯咖啡。

如果您喜欢我的文章并看到对您有用,则可以buy me a coffee,它将帮助我继续前进并继续创建更多内容。

ð项目存储库

您可以在Github

上找到此项目的最新更新

ð加入我们的社区

加入我们的社区Discord获得帮助和支持(节点JS 2023频道)。

ð视频课程(阿拉伯语)

如果您想以视频格式学习此课程,则可以在Youtube上找到该课程,该课程是阿拉伯语。

ð奖励内容ð

您可能会看这些文章,这肯定会提高您的知识和生产力。

一般主题

软件包和库

React JS软件包

课程(文章)