Node+Koa2从零搭建通用API服务——系列1

290 阅读2分钟

一. 项目的初始化

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启动服务

image.png

2. 读取配置文件

安装dotenv,读取根目录中的.env文件,将配置写到process.envpnpm 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

步骤:

  1. 导入包
  2. 实例化对象
  3. 编写路由
  4. 注册中间件

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())

参考视频

www.bilibili.com/video/BV13A…