有时,值未完全传递,因此,如果它们在给定的资源数据中缺少它们,我们需要为其设置默认值。
默认值
默认值基本上是值,如果给定资源数据没有我们要使用的密钥,将使用。
这个怎么运作
因此,我们将仅定义一个名为defaults
的属性,这只是一个普通对象,包含一个要用作输出的键,该密钥的值将是默认值。
就是这样!
例子
现在打开我们的user-resource.ts
文件并添加以下代码:
// src/app/users/resources/user-resource.ts
import Resource from 'core/resources/resource';
import { uploadsUrl } from 'core/utils/urls';
export default class UserResource extends Resource {
/**
* Output shape
*/
protected output: any = {
id: 'number',
name: 'string',
email: 'string',
age: 'number',
avatar: uploadsUrl,
createdBy: UserResource,
};
/**
* Defaults when key is missing from resource
*/
protected defaults = {
name: "John Doe",
image: "users/my-image.jpg",
};
}
我们在这里定义了一个名为defaults
的新属性,我们定义了一个键name
,其默认值为John Doe
,我们定义了一个键image
,其默认值为users/my-image.jpg
。
,但是当然它不会像我们不像往常一样实施,所以让我们这样做。
执行
现在打开我们的基本资源类,我们将添加以最初用空对象定义的defaults
属性,然后在我们的转换方法中,我们将添加另一个检查,如果键在资源中不存在,我们,我们'll检查它是否存在于defaults
属性中,如果存在,我们将使用它,否则我们将使用missingKey
符号。
// src/core/resources/resource.ts
import { get } from "@mongez/reinforcements";
// this will be used to skip the output property if it is missing from the given resource
const missingKey = Symbol("missing");
export default class Resource {
/**
* Output shape
*/
protected output: any = {};
/**
* Defaults when key is missing from resource
*/
protected defaults: any = {};
/**
* Constructor
*/
public constructor(protected resource: any = {}) {
//
}
/**
* {@inheritDoc}
*/
public toJSON() {
// final output
const data: Record<string, any> = {};
// loop through the output property
for (const key in this.output) {
// get the value type
const valueType = this.output[key];
// get the value, and also make sure to skip the output property if it is missing from the given resource
// check that other 👇🏻 get to check if the key exists in the defaults object
let value = get(this.resource, key, get(this.defaults, key, missingKey));
// skip the output property if it is missing from the given resource
if (value === missingKey) {
continue;
}
if (typeof valueType === "string") {
// cast the value
value = this.cast(value, valueType);
} else if (valueType.prototype instanceOf Resource) {
// if the value type is a resource, then pass the value to it
value = new valueType(value).toJSON();
} else if (typeof valueType === "function") {
// call the custom output handler
value = valueType(value);
}
// just for now sett the output value to the data
data[key] = value;
}
return data;
}
}
我们在这里更改的所有内容是get
函数的第三个参数,而不是传递missingKey
符号,我们将传递另一个get
函数,但是这次将在defaults
属性中进行搜索,如果键存在于defaults
中。属性,它将返回该值,否则它将返回missingKey
符号。
现在尝试在您的代码中尝试一下,您会看到name
和image
键将在输出中添加到其默认值中,如果您不在资源数据中传递它们。
- 结论
在本课程中,我们学会了如何在给定资源数据中缺少输出键的默认值。
。â•给我买一杯咖啡。
如果您喜欢我的文章并看到对您有用,则可以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软件包
课程(文章)