koa2 mysql nodejs 项目从0搭建及项目地址
## koa2mysql nodejs项目从0搭建一.项目的初始化1 npm 初始化npm init -y生成package.json 文件2 git 初始化git init生成.git 隐藏文件夹git的本地仓库3 创建Readme.md文件二.搭建项目1.安装Koa框架npm install Koa --save2.编写最基本的app创建 src/main.jsconst Koa =requ
一.项目的初始化
1 npm 初始化
npm init -y
生成package.json 文件
2 git 初始化
git init
生成.git 隐藏文件夹 git的本地仓库
3 创建Readme.md文件
二.搭建项目
1.安装Koa框架
npm install Koa --save
2.编写最基本的app
创建 src/main.js
const Koa =require('koa')
const app =new Koa()
app.use((ctx,next)=>{
ctx.body='hello api'
})
app.listen(3000,()=>{
console.log('server running on http://localhost:3000')
})
3.测试
http://localhost:3000
三.项目优化
1.自动重启服务
安装nodemon工具
npm install nodemon --save
编写package脚本在package.json 里面
"scripts": {
"dev": "nodemon ./src/main.js",
"test": "echo \"Error: no test specified\" && exit 1"
}
1.读取配置文件
安装dotenv,读取根目录.env文件,将配置写到pross.env
npm install dotenv --save
创建.env 文件
APP_PORT=8000
创建src/config/config.default.js
const dotenv =require('dotenv')
dotenv.config()
module.exports=process.env
改写main.js
// 项目入口文件
const Koa =require('koa')
// 读到配置的端口 解构赋值将里面的APP_PORT结构出来
const {APP_PORT}=require('./config/config.default')
const app =new Koa()
app.use((ctx,next)=>{
ctx.body='hello api'
})
app.listen(APP_PORT,()=>{
console.log(`server running on http://localhost:${APP_PORT}`)
})
四.添加路由
路由:根据不同的URL,调用对象处理函数
1.安装Koa-route
npm install koa-router --save
步骤:
1.导入包
2.实例化对象
3.编写路由
4.注册中间件
const Router=require('koa-router')
const router =new Router()
router.get('/',(ctx,next)=>{
ctx.body="users"
})
app.use(router.routes())
2.拆分文件夹编写路由
const Router=require('koa-router')
const router =new Router({prefix:'/users'})
router.get('/',(ctx,next)=>{
ctx.body="users"
})
3.改写main.js
const Koa =require('koa')
const {APP_PORT}=require('./config/config.default')
const app =new Koa()
const usersRouter=require('./router/use.routes')
app.use(usersRouter.routes())
app.listen(APP_PORT,()=>{
console.log(`server running on http://localhost:${APP_PORT}`)
})
五.目录结构优化
1将http服务和app业务拆分
创建src/app/index.jx
const Koa =require('koa')
const app =new Koa()
const usersRouter=require('../router/use.routes')
app.use(usersRouter.routes())
module.exports=app
改写main.js
const {APP_PORT}=require('./config/config.default')
const app = require('./app/index')
app.listen(APP_PORT,()=>{
console.log(`server running on http://localhost:${APP_PORT}`)
})
2将路由里面业务拆分出去
路由:解析URL,分布给控制器对应的方法
1.创建src/controller/user.controller.js
2.拆分业务
class UseController {
async register(ctx,next){
ctx.body='注册成功'
}
async login(ctx,next){
ctx.body='登录成功'
}
}
module.exports=new UseController() // 导出的是一个实例化对象
const Router=require('koa-router')
const {register,login}=require('../controller/use.controller')
const router =new Router({prefix:'/users'})
// router.get('/register',(ctx,next)=>{
// 将(ctx,next)=>{}拆分出去
// })
router.get('/register',register) // router.post('/',(ctx,next)=>{}) 将()=>拆分出去
router.get('/login',login)
module.exports=router
六.解析BODY
1.安装koa-body
npm install koa-body --save
2.注册中间件
改写app/index.js
const KoaBody=require('koa-body')
const app =new Koa()
const usersRouter=require('../router/use.routes')
app.use(KoaBody())
// 所有的路由处理之前
app.use(usersRouter.routes())
module.exports=app
3.解析请求数据
改写user.controller.js
const {createUser} =require('../service/user.service')
class UseController {
async register(ctx,next){
// 1. 获取数据
// console.log(ctx.request.body)
const {user_name,password}=ctx.request.body
// 2. 操作数据库
const res =await createUser(user_name,password)
console.log(res)
// 3. 还回结果
ctx.body=ctx.request.body
}
async login(ctx,next){
ctx.body=ctx.request.body
}
}
module.exports=new UseController() // 导出的是一个实例化对象
4拆分数据库层
创建servers层
class UserService{
// 操作数据库
async createUser(user_name,password){
return '写入数据库成功'
}
}
module.exports=new UserService()
git log --oneline
七.数据库操作
sequelize ORM数据库工具
ORM :对象关系映射
- 数据表映射(对应)一个类
- 数据表中的数据行(记录)对应一个对象
- 数据表字段对应对象的属性
- 数据表的操作对应对象的方法
1.安装 sequelize
npm install sequelize --save
2.安装 myql2
npm install mysql2 --save
3.连接数据库
创建src/db/seq.js
const { Sequelize } = require('sequelize')
const {
MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PWD, MYSQL_DB
} = require('../config/config.default')
const seq = new Sequelize(MYSQL_DB, MYSQL_USER, MYSQL_PWD, {
MYSQL_HOST: MYSQL_HOST,
dialect: 'mysql',
})
// seq.authenticate().then(()=>{
// console.log('数据库连接成功')
// }).catch(
// ()=>{
// console.log('失败')
// }
// )
module.exports = seq
4.编写配置文件
APP_PORT= 3000
MYSQL_HOST= locahost
MYSQL_PORT= 3306
MYSQL_USER = root
MYSQL_PWD = 123456
MYSQL_DB= zdsc
八sequelize
sequelize主要通过Model对应数据表
创建src/model/user.model.js
const {DataTypes} =require('sequelize')
const seq =require('../db/seq')
//创建模型 (Model zd_user->zd_users)
const User = seq.define('zd_user',{
// id 会被sequeliza自动创建,管理
user_name:{
type:DataTypes.STRING,
allowNull:false,
unique:true,
common:'用户名,唯一'
},
password:{
type:DataTypes.CHAR(64),
allowNull:false,
common:'密码'
},
is_admin:{
type:DataTypes.BOOLEAN,
allowNull:false,
defaultValue:0,
comment:"是否为管理员,0是管理员,1不是管理员"
}
})
// User.sync({force:true}) //强制同步数据库,创建数据表
module.exports=User
github地址 https://gitee.com/sun-jiwen/study-koa.git 里面有权限,登录 ,修改密码等等后期会持续添加,记得用try catch 捕获异常
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)