让我们在这里使用新功能,从单个资源中获取资源的收集(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上找到该课程,该课程是阿拉伯语。
ð奖励内容ð
您可能会看这些文章,这肯定会提高您的知识和生产力。
一般主题
- Event Driven Architecture: A Practical Guide in Javascript
- Best Practices For Case Styles: Camel, Pascal, Snake, and Kebab Case In Node And Javascript
- After 6 years of practicing MongoDB, Here are my thoughts on MongoDB vs MySQL
软件包和库
- Collections: Your ultimate Javascript Arrays Manager
- Supportive Is: an elegant utility to check types of values in JavaScript
- Localization: An agnostic i18n package to manage localization in your project
React JS软件包
课程(文章)