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)