Custom Casts
Now let's talk about custom casts, what if we want to cast a value to a custom type, for example, we want to cast the password value.
Let's make a folder called casts
in the src/core/database/casts
folder and create cast-password.ts
file.
We need to generate a make a password generated and to be solid, we will use Password Hash Generator And Verifier to achieve this easily.
Let's install it
yarn add @mongez/password
Now let's create the cast-password.ts
file
// src/core/database/casts/cast-password.ts
import { hash } from '@mongez/password';
/**
* Cast password
*/
export default function castPassword(
columnName: string,
value: any
) {
return hash(value, 15); // second argument is the salt
}
Now let's update the User
model to use this cast
// src/app/users/models/user.ts
import { Model } from "core/database";
import castPassword from "core/database/casts/cast-password";
import { Casts, Document } from "core/database/model/types";
export default class User extends Model {
/**
* Collection name
*/
public static collectionName = "users";
/**
* {@inheritDoc}
*/
public defaultValue: Document = {
isActive: true,
isEmailVerified: false,
isPhoneVerified: false,
};
protected casts: Casts = {
isActive: "boolean",
isPhoneVerified: "boolean",
joinDate: "date",
password: castPassword,
};
}
Now let's try to create a new user
// src/app/users/routes.ts
import User from './models/user';
const user = new User({
name: 'Hassan',
password: '123456',
});
await user.save();
consol.log(user.data); // { name: 'Hassan', password: '$2b$23$...' }
And that's it!
🎨 Conclusion
In this lesson, we learned how to create custom casts, and we created a custom cast for the password value.
🚀 Project Repository
You can find the latest updates of this project on Github
😍 Join our community
Join our community on Discord to get help and support (Node Js 2023 Channel).
🎞️ Video Course (Arabic Voice)
If you want to learn this course in video format, you can find it on Youtube, the course is in Arabic language.
💰 Bonus Content 💰
You may have a look at these articles, it will definitely boost your knowledge and productivity.
General Topics
- 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
Packages & Libraries
- 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 Packages
Courses (Articles)
Top comments (0)