تجربه من با AdonisJS و نحوه ساخت اولین CRUD خود

معرفی
در این مقاله در مورد تجربه فعلی خود با چارچوب Adonijs و MVC (Model-View-Controller) برای Node.js صحبت خواهم کرد.
باید اعتراف کنم که قبلاً تجربه ای با فریمورک داشته ام، با این حال، هرگز از 100% پتانسیل آن استفاده نکرده ام. اخیراً یک پیشنهاد کاری دریافت کردم که باعث شد AdonisJS را به صورت حرفه ای یاد بگیرم و از آن استفاده کنم و هم از مستندات آن که بسیار خوب است و هم از نظر استانداردهای اجباری آن شگفت زده شدم، چیزی که احساس می کنم در فریمورک های Node.js بسیار کم است. مواردی که بیشتر از همه در این زمینه برجسته هستند NestJS و AdonisJS هستند. این برای من (یک موضوع بحث برانگیز) بسیار مهم است.
اسناد و استانداردهای اجباری
مستندات AdonisJS بسیار واضح و دقیق است که منحنی یادگیری و عیب یابی را آسان تر می کند. این همه چیز از مفاهیم اولیه گرفته تا عملکردهای پیشرفته را پوشش می دهد و پایه ای محکم برای توسعه دهندگان در همه سطوح فراهم می کند.
استانداردهای اجباری AdonisJS به سازماندهی و سازگاری کد کمک می کند، که برای نگهداری و مقیاس پذیری پروژه بسیار مهم است. اینجاست که بسیاری از فریمورکهای Node.js شکست میخورند، زیرا فضای زیادی برای تفسیر و پیادهسازی توسط توسعهدهندگان باقی میگذارند. با AdonisJS، یک ساختار کاملاً تعریف شده وجود دارد که توسعه را به طور مؤثر هدایت می کند.
ابزار خود
AdonisJS به دلیل ابزارهای اضافی خود که بسیار جالب هستند متمایز است. به عنوان مثال، Lucid، ORM خود که قبلاً در چارچوب یا حتی CLI خود ادغام شده است، یک رابط خط فرمان قدرتمند و بصری است که به ایجاد و مدیریت پروژه ها کمک می کند، علاوه بر تسهیل کارهای رایج مانند ایجاد مدل ها، کنترلرها و مهاجرت ها
میتوانم ساعتها در مورد این ابزارها صحبت کنم، مانند Sessions، Auth که با دستور CLI پیکربندی شده است (این باورنکردنی است)، رمزگذاری، ایمیلها و بسیاری دیگر.
ساخت اولین CRUD من با AdonisJS
بعد از این همه تعریف و تمجید فکر می کنم نشان دادن آن در عمل بهتر است تا به شما ثابت کنم چقدر خوب است.
بیایید یک مثال ساده از یک CRUD (ایجاد، خواندن، بهروزرسانی، حذف) در AdonisJS V6 با استفاده از Lucid ORM و AdonisJS CLI ایجاد کنیم. این مثال شامل ایجاد یک برنامه کاربردی برای مدیریت لیست وظایف است.
1. راه اندازی پروژه
ابتدا اجازه دهید یک پروژه AdonisJS جدید راه اندازی کنیم:
# Instale a CLI do AdonisJS globalmente se ainda não tiver
npm install -g @adonisjs/cli
# Crie um novo projeto AdonisJS
adonis new tasks-app
# Navegue até a pasta do projeto
cd tasks-app
# Instale as dependências
npm install
2. پیکربندی پایگاه داده
پایگاه داده را در فایل config/database.ts پیکربندی کنید. این مثال برای سادگی از SQLite استفاده می کند، اما می توانید از هر پایگاه داده پشتیبانی شده استفاده کنید.
// config/database.ts
const databaseConfig: DatabaseConfig = {
connection: 'sqlite',
connections: {
sqlite: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '..', 'database.sqlite')
},
useNullAsDefault: true,
migrations: {
naturalSort: true,
},
healthCheck: false,
debug: false,
},
// Outras configurações de banco de dados...
}
}
3. جدول وظایف را ایجاد کنید
بیایید جدول وظیفه را با استفاده از migrations ایجاد کنیم.
# Criar uma migração para a tabela de tarefas
adonis make:migration tasks --create=tasks
مهاجرت ایجاد شده را در پایگاه داده/migrations/TIMESTAMP_tasks.ts ویرایش کنید:
import BaseSchema from '@ioc:Adonis/Lucid/Schema'
export default class Tasks extends BaseSchema {
protected tableName = 'tasks'
public async up () {
this.schema.createTable(this.tableName, (table) => {
table.increments('id')
table.string('title').notNullable()
table.text('description')
table.boolean('is_completed').defaultTo(false)
table.timestamps(true)
})
}
public async down () {
this.schema.dropTable(this.tableName)
}
}
مهاجرت را اجرا کنید:
adonis migration:run
4. قالب Task را ایجاد کنید
یک مدل برای تعامل با جدول کار ایجاد کنید.
# Criar o modelo Task
adonis make:model Task
مدل تولید شده را در app/Models/Task.ts ویرایش کنید:
import { DateTime } from 'luxon'
import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'
export default class Task extends BaseModel {
@column({ isPrimary: true })
public id: number
@column()
public title: string
@column()
public description: string
@column()
public isCompleted: boolean
@column.dateTime({ autoCreate: true })
public createdAt: DateTime
@column.dateTime({ autoCreate: true, autoUpdate: true })
public updatedAt: DateTime
}
5. Task Controller را ایجاد کنید
یک کنترل کننده برای مدیریت عملیات CRUD ایجاد کنید.
# Criar o controlador TaskController
adonis make:controller Task
کنترل کننده تولید شده را در app/Controllers/Http/TaskController.ts ویرایش کنید:
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import Task from 'App/Models/Task'
export default class TaskController {
public async index({ response }: HttpContextContract) {
const tasks = await Task.all()
return response.json(tasks)
}
public async store({ request, response }: HttpContextContract) {
const data = request.only(['title', 'description', 'is_completed'])
const task = await Task.create(data)
return response.status(201).json(task)
}
public async show({ params, response }: HttpContextContract) {
const task = await Task.find(params.id)
if (!task) {
return response.status(404).json({ message: 'Task not found' })
}
return response.json(task)
}
public async update({ params, request, response }: HttpContextContract) {
const task = await Task.find(params.id)
if (!task) {
return response.status(404).json({ message: 'Task not found' })
}
const data = request.only(['title', 'description', 'is_completed'])
task.merge(data)
await task.save()
return response.json(task)
}
public async destroy({ params, response }: HttpContextContract) {
const task = await Task.find(params.id)
if (!task) {
return response.status(404).json({ message: 'Task not found' })
}
await task.delete()
return response.status(204).json(null)
}
}
6. مسیرها را پیکربندی کنید
فایل مسیرها را در start/routes.ts ویرایش کنید تا مسیرها را برای وظیفه CRUD شامل شود:
import Route from '@ioc:Adonis/Core/Route'
Route.get('/tasks', [TaskController.'index'])
Route.post('/tasks', [TaskController.'store'])
Route.get('/tasks/:id', [TaskController.'show'])
Route.put('/tasks/:id', [TaskController.'update'])
Route.delete('/tasks/:id', [TaskController.'destroy'])
7. برنامه را تست کنید
اکنون سرور AdonisJS را راه اندازی کنید:
adonis serve --watch
دیدی چقدر آسان و سریع است؟ علاوه بر استفاده از CLI برای انجام بیشتر کارها، یک استاندارد را نیز در پروژه خود حفظ می کنید و این خیلی خوب است!!!
ممنون از خواندن مقاله 🙂