WEB II Connecting Database to Web Server Lesson016
WEB II Connecting Database to Web Server Lesson016
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
Set Environment Variables
Create .env file in your project root:
DATABASE_URL = mysql://root:dan12345678@localhost:3306/backendsample
Put the database url
Generate Prisma Client
yarn prisma generate
Create Migration
yarn prisma migrate dev --name init --create-only
│ ├── config/
│ │ └── prisma.js
│ ├── controllers/
│ │ └── userController.js
│ └── routes/
│ └── userRoutes.js
└── server.js
Now let’s write the following sample code to look at the functionality of restful
Api and store data to the database
Server.js
const express = require('express')
const { PrismaClient } = require('@prisma/client')
const userRoutes = require('./routes/userRoutes')
// Middleware
app.use(express.json())
// Routes
app.use('/api/users', userRoutes)
// Start server
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`)
})
Routes/userRoute.js
const express = require('express')
const router = express.Router()
const {
getUsers,
createUser,
getUserById,
updateUser,
patchUser,
deleteUser
} = require('../controllers/userController')
// DELETE user
router.delete('/:id', deleteUser)
module.exports = router
Prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
Controllers/usercontroller.js
const prisma = require('../config/prisma')
res.json(users)
} catch (error) {
console.error(error)
res.status(500).json({ error: 'Database error' })
}
}
if (!name || !email) {
return res.status(400).json({
error: 'Both name and email are required'
})
}
if (!user) {
return res.status(404).json({ error: 'User not found' })
}
res.json(user)
} catch (error) {
console.error(error)
res.status(500).json({ error: 'Database error' })
}
}
if (!name || !email) {
return res.status(400).json({
error: 'Both name and email are required for full update'
})
}
if (!existingUser) {
return res.status(404).json({ error: 'User not found' })
}
res.json(updatedUser)
} catch (error) {
if (error.code === 'P2002') {
return res.status(400).json({ error: 'Email already exists' })
}
console.error(error)
res.status(500).json({ error: 'Database error' })
}
}
// Delete user
const deleteUser = async (req, res) => {
try {
const id = parseInt(req.params.id)
module.exports = {
getUsers,
createUser,
getUserById,
updateUser,
patchUser,
deleteUser
}
Config/prisma.js
const { PrismaClient } = require('@prisma/client')
module.exports = prisma
.env
DATABASE_URL = mysql://root:dan12345678@localhost:3306/backendsample