一. 项目的初始化
1. npm 初始化
pnpm init -y
2. git 初始化
git init
创建ReadMe文件
二. 搭建项目
1. 安装Koa框架
pnpm install koa
版本: "koa": "^2.15.3"
2. 编写最基础的app
创建src/mian.js
const Koa = require('koa')
const app = new Koa()
// use 后面写一个中间件
app.use((ctx, next) => {
ctx.body = 'hello api'
})
app.listen(3000, () => {
console.log('server is running on http://localhost:3000')
})
3. 测试
在终端,使用node src/main.js
三. 项目的基本优化
1. 自动重启服务
安装nodemon工具
pnpm install nodemon -D
编写package.json脚本
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "nodemon ./src/main.js"
},
执行pnpm run dev启动服务
2. 读取配置文件
安装dotenv,读取根目录中的.env文件,将配置写到process.env中
pnpm install dotenv
创建.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')
const { APP_PORT } = require('./config/config.default')
const app = new Koa()
// use 后面写一个中间件
app.use((ctx, next) => {
ctx.body = 'hello world'
})
app.listen(APP_PORT, () => {
console.log(`server is running on http://localhost:${APP_PORT}`)
})
四. 添加路由
路由:根据不同的URL,调用对应的处理函数
1. 安装koa-router
pnpm install koa-router
步骤:
- 导入包
- 实例化对象
- 编写路由
- 注册中间件
2. 编写路由
创建src/router目录,编写user.route.js
const Router = require('koa-router')
const router = new Router({
prefix: '/users',
})
router.get('/', (ctx, next) => {
ctx.body = 'hello users'
})
module.exports = router
改写main.js
const Koa = require('koa')
const { APP_PORT } = require('./config/config.default')
const userRouter = require('./router/user.route')
const app = new Koa()
// use 需要接受函数作为中间件 middleware must be a function
app.use(userRouter.routes())
// use 后面写一个中间件
app.use((ctx, next) => {
ctx.body = 'hello world'
})
app.listen(APP_PORT, () => {
console.log(`server is running on http://localhost:${APP_PORT}`)
})
五. 目录结构优化
1. 将http服务和app业务拆分
创建 src/app/index.js
const Koa = require('koa')
const userRouter = require('../router/user.route')
const app = new Koa()
// use 需要接受函数作为中间件 middleware must be a function
app.use(userRouter.routes())
// use 后面写一个中间件
app.use((ctx, next) => {
ctx.body = 'hello world'
})
module.exports = app
改写main.js
const { APP_PORT } = require('./config/config.default')
const app = require('./app')
app.listen(APP_PORT, () => {
console.log(`server is running on http://localhost:${APP_PORT}`)
})
2. 将路由和控制器拆分
路由: 解析URL,分发给控制器对应的方法
控制器: 处理不同的业务
改写user.route.js
const Router = require('koa-router')
const { register, login } = require('../controller/user.controller')
const router = new Router({
prefix: '/users',
})
router.post('/register', register)
router.post('/login', login )
module.exports = router
创建src/controller/user.controller.js
class UserController {
// 数据库查询是异步的,所以使用async
async register(ctx, next) {
ctx.body = '用户注册成功'
}
async login(ctx, next) {
ctx.body = '用户登陆成功'
}
}
module.exports = new UserController()
六. 解析body
安装koa-body
pnpm i koa-body
在src/index.js中使用koa-body
const { koaBody } = require('koa-body')
app.use(koaBody())
七. 解决跨域
安装koa-cors
pnpm i koa-cors
在src/index.js中使用koa-cors
const cors = require('koa-cors')
app.use(cors())