នៅក្នុងមូលដ្ឋានទិន្នន័យ MongoDB ទិន្នន័យទាំងឡាយត្រូវស្ថិតនៅក្នុងបណ្តុំទិន្នន័យ (collection) ឬជំពូកខុសៗគ្នា មានដូចជាបណ្តុំទិន្នន័យ Post, Page, Category, User ជាដើម។ ជាកិច្ចចាប់ផ្តើម យើងនឹងបង្កើតបណ្តុំទិន្នន័យ User មួយ ដោយបង្កើត Schema នៃបណ្តុំទិន្នន័យនេះនៅក្នុងឯកសារ prisma/schema.prisma ។
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mongodb"
url = env("MONGO_URL")
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
title String
password String
role String
thumb String
content String
date String
}
នៅពេលដែល schema នៃបណ្តុំទិន្នន័យ User ត្រូវបានបង្កើតរួចហើយ ការបង្កើតទិន្នន័យសំរាប់អ្នកប្រើប្រាស់ណាម្នាក់អាចត្រូវធ្វើឡើងនៅក្នុងក្បួនចុងផ្លូវនៅក្នុងឯកសារ src/pages/api/login.js ។
// src/pages/api/login.js
import bcrypt from "bcryptjs"
export async function GET({params, request, locals}){
const prisma = locals.prisma
const hashPassword = bcrypt.hashSync("password", 8)
await prisma.user.create({
data: {
email: "guest@khmerweb.app",
title: "Guest",
password: hashPassword,
role: "Guest",
thumb: "",
content: "",
date: ""
}
})
const allUsers = await prisma.user.findMany()
return new Response(
JSON.stringify({
users: allUsers
})
)
}
នៅពេលដែលយើងបើក browser និងចូលទៅកាន់អាស័យដ្ឋាន http://localhost:4321/api/login យើងនឹងឃើញលទ្ធផលនៅលើ browser បង្ហាញពីទិន្នន័យនៃអ្នកប្រើប្រាស់ថ្មីដែលទើបត្រូវបានបង្កើតឡើងនោះ។
នៅក្នុងក្បួនចុងផ្លូវខាងលើនេះ មានការប្រើប្រាស់កញ្ចប់ bcryptjs ក្នុងការកែពាក្យសំងាត់អោយទៅជាកូដដែលមនុស្សធម្មតាមិនអាចមើលយល់ មានតែកំព្យូទ័រប៉ុណ្ណោះដែលមើលយល់។ ការធ្វើរបៀបនេះគឺការបង្កាមិនអោយពាក្យសំងាត់របស់អ្នកប្រើប្រាស់អាចត្រូវគេលួចយកទៅប្រើប្រាស់បាន។ យើងត្រូវតំឡើងកញ្ចប់ bcryptjs នេះដោយសរសេរកូដនៅលើបង្អួច Terminal ថា៖
npm install bcryptjs
មួយវិញទៀត យើងចាំបាច់ត្រូវបន្ថែមកូដមួយបន្ទាត់ដូចខាងក្រោមនេះចូលទៅក្នុងឯកសារ package.json នៅត្រង់កន្លែងដែលមានពាក្យ scripts នៅក្នុងនោះ ទើបកញ្ចប់ Prisma អាចដំណើរការបាននៅលើប្រព័ន្ធ Netlify ។
"postinstall": "prisma generate"
{
"name": "dynamic-blog",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro",
"postinstall": "prisma generate"
},
"dependencies": {
"@astrojs/netlify": "^3.0.2",
"@astrojs/tailwind": "^5.0.0",
"@prisma/client": "^5.3.1",
"astro": "^3.1.4",
"bcryptjs": "^2.4.3",
"jsonwebtoken": "^9.0.2",
"tailwindcss": "^3.3.3"
},
"devDependencies": {
"prisma": "^5.3.1"
}
}