第一步 安装mysql依赖:
npm install mysql2
第二步 安装express:
npm install express
第三步 安装js-yaml
npm install js-yaml
第四步:修改package.json
将package.json的type改为module 是ESM的语法
第五步:index.js
项目根目录创建一个 db.config.yaml 的文件 代码如下
db:
user:root
password:'123456'
host:localhost
port:3306
database:xiaoman
index.js文件中的代码
import mysql2 from 'mysql2/promise'
import fs from 'fs'
import jsyaml from 'js-yaml'
import express from 'express'
const yaml = rs.readFileSync('./db.config.yaml','utf8')
const config = jsyaml.load(yaml)
mysql2.createConnection({
host:'',
user:'',
password:'',
database:'',
})
const sql = await mysql2.createConnection({...config.db}) // 替代上面的配置
const app = express()
// 查询全部的接口
app.get('/',async(req,res)=>{
const [data] = await sql.query('select * from user')// 返回值是[[],[]]然后结构
res.send(data)
})
// 单个查询
app.get('/user/:id',async(req,res)=>{
const [data] = await sql.query(`select * from user where id=${req.params.id}`)
const [data] = await sql.query(`select * from user where id=?`,[req.params.id])
res.send(data)
})
// 新增接口
app.post('/create',async(req,res)=>{
const {name,age,hobby} = req.body
await sql.query(`insert into use(name,age,hobby) values(?,?,?)`,[name,age,hobby])
res.send({ok:1})
})
// 修改
app.post('/update',async(req,res)=>{
const {name,age,hobby,id} = req.body
await sql.query(`update user set name=?,age=?,bobby=? where id = ?`,
[name,age,hobby,id])
res.send({ok:1})
})
// 删除
app.post('/delete',async(req,res)=>{
await sql.query(`delete from user where id =?`, [req.body.id])
res.send({ok:1})
})
const port = 3000
app.lister(port,()=>{
console.log(`http://localhost:${port}`)
})
Knex的使用:作用操作数据库
安装 npm i mysql2 ; npm u knex;
使用: import knex from 'knex'
链接数据库使用knex;
const db = knex({client:'mysql2', connection:config.db})
使用knex创建表和字段
db.schema.createTableIfNotExists('list',table=>{
table.increments('id') id主键 自增
table.integer('age') 整数
table.string('name') 字符串
table.string('bobby' ) 字符串
table.timestamps(true,true) 创建时间 更新时间
}).then(()=>{console.log('创建成功')})
插入数据的语句
app.post('/create',async(req,res)=>{
const {name,age,hobby,id} = req.body
await db('list').select() // 查询全部
await db('list').select().where({id:req.body.id}) // 根据id查询单个数据
await db('list').select().delete({id:req.body.id}) // 根据id删除单个数据
await db('user').select().leftJoin('table','user.id','table.user_id') // 连表查询
await db('list').count('* as total') // 查询所有条数 [{total:10}]
await db('list').select().order('id','desc') // id倒叙排列
await db('list').insert({name,age,hobby}) // 新增
await db('list').update({name,age,hobby}).where({id}) // 更新
什么是事务:保持事情的一致性要么都成功要么都失败,
比如:A给B转100 A需要减100, B增100, 假设a给b转了,a减了100,但是数据库短开了那么b就没有加上,那么就出大问题了。
db.transaction(async trx={
try{
await trx('list').update({money:-100}).where({id:1})
await trx('list').update({money:+100}).where({id:2})
await trx.commit() 提交事务
}catch(err){
await trx.rollback() 回滚事务
}
}).then(()=>{}).catch(res=>{})
res.send({ok:1})
})
什么是prisma?企业级的框架,
第一步进行安装 npm i prisma -g
第二步创建一个目录在目录中执行:prisma init -h;查看相关的命令
第三步创建项目执行:prisma init --datasource-provider mysql, 使用mysql数据库
第四步创建完项目之后,查看.env的文件:
DATABASE_URL="mysql://johnode:randomapassword@localhost:3306/mydb"
mysql://账号:密码@主机:端口号/数据库名称
第五步:prisma/schema.prisma目录用来编写表结构:
generator client {provider="prisma-client-js"}
datasource db {provider="mysql" url = env("DATABASE_URL")}
这个文件编写表结构: User Post两个表
model Post { 文章表
id: Int @id @default(autoincrement()) id自增
title String
content String
author User @relation(fields:[authorId],references:[id]) 关联下面的User表
authorId Int
}
model User{ 用户表 一个用户可以发多个文章 一对多
id: Int @id @default(autoincrement()) id自增
name String
email String @unique 唯-
posts Post[] 一对多的关系
}
第六步 执行命令 prisma migrate dev
第七步 项目中新建一个src目录
第八步 执行 tsc --init 生成ts的配置文件, npm i typescript -g ; npm i ts-node -g;
第九步 src/app.ts npm i express npm i --save-dev @type/express
import express from 'express'
import {PrismaClient} from '@prisma/client'
const prisma = new PrismaClient()
const app = express()
app.use(express.join()) // 支持post
// 新增数据的接口
app.post('/create',async(req,res)=>{
const {name,email} = req.body
const data = await prosma.user.create({
data:{
name:name,
email:email,
posts:{ // 在这里还可以给posts表添加数据
create:[ // 如果是单条数据 就是对象 多条数据就是数组
{title:'文章标题',content:'文章的内容' },
{title:'文章标题2',content:'文章的内容' }
]
}
}
})
res.send(data)
})
查询数据的接口
app.get('/',async(req,res)=>{
const data = await prisma.user.findMany()
res.send(data)
})
app.get('/',async(req,res)=>{ // 把文章表的也一块查询出来
const data = await prisma.user.findMany({
includes:{posts:true}
})
res.send(data)
})
单条查询
app.get('/user:id',async(req,res)=>{ // 把文章表的也一块查询出来
const data = await prisma.user.findMany({
where:{id:Number(req.params.id)]
})
res.send(data)
})
编辑数据
app.post('/update',async(req,res)=>{
const {name,email,id} = req.body
await prisma.user.update({
data:{
name,
email
},
where:{
id:Number(id)
}
})
})
删除数据: 删除user的id, 但是因为posts文章的数据关联到了user的id 所以需要先删posts的数据
app.post('/delete',aysnc(req,res)=>{
await prisma.post.deleteMany({
where:{
authorId:Number(req.body.id)
}
})
await prisma.user.delete({
where:{
id:Number(req.body.id)
}
})
})
const port = 3000
app.listen(port,()=>{console.log('http://localhost:3000')})