node-koa框架 项目搭建
简介
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
官网地址
初始化项目
生成package.json
npm init 复制代码
安装 koa
npm install koa 复制代码
新建入口文件
新建src文件夹 新建一个mian.js(叫什么都可以比如index.js)
const Koa = require('koa') const app = new Koa() app.use((ctx, next)=>{ ctx.body = 'hello' }) const port = process.env.PORT || 8000 app.listen(port,()=>{ console.log(`server is running on ${port}`) }) 复制代码
node src/main.js
启,在浏览器访问端口,
自动启动配置文件 nodemon
安装
npm i nodemon 复制代码
添加启动命令
package.json dev替换成别的也可以
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "nodemon ./src/main.js" }, 复制代码
之后在控制台执行命令 npm run dev
就可以启动了。并且当我们改动代码,他也会自动的重启。
读取配置文件
安装 dotenv
npm i dotenv 复制代码
在根目录下新建.env文件(存一些项目配置的环境变量)
然后新建 src/config/config.default.js
const dotenv = require('dotenv') dotenv.config() console.log(process.env.APP_PORT) // process node的进程 // env 环境变量 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 is running on ${APP_PORT}`) }) 复制代码
添加路由配置
安装 koa-router
npm i koa-router 复制代码
看一下 koa-router 文档
首先去npmjs的官网查看 ,好巧不巧 ,没有写。 npmjs
不要 紧的 我们再看看github上有没有 ✈️
使用步骤:
导入包 引入koa-router
const Router = require('koa-router') 复制代码
实例化对象
const indexRouter = new Router() 复制代码
编写路由
indexRouter.get('/',(ctx, next)=>{ ctx.body = 'hello index' }) 复制代码
注册中间件
把router和app关联起来,通过router.routes()方法去注册中间键。
router 是一个对象,但是我们app.use()只能接收一个函数作为参数。
// 必须是一个函数 app.use(indexRouter) app.use(indexRouter.routes()) 复制代码
抽离出路由文件
假如我们有一类uers的路由,我们需要新实例化一个 UserRouter,还有之前的IndexRouter。都写到main.js文件中并不是很好的写法。
新建router文件夹用于存放各种api
router/user.route.js
const Router = require('koa-router') const router = new Router({prefix:'/users'}) // 会和 /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() // 必须是一个函数 app.use(userRouter.routes()) app.listen(APP_PORT, () => { console.log(`server is running on ${APP_PORT}`) }) 复制代码
目录结构优化
目的:将http服务和app业务分开
新建app文件,在其下面新建index.js 将mian.js中的实例化对象和使用router的都抽离出来
const Koa = require('koa') const userRouter = require('./router/user.route') const app = new Koa() // 必须是一个函数 app.use(userRouter.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 is running on ${APP_PORT}`) }) 复制代码
然后我们发现报错了,因为把main.js中的代码直接剪切到index.js中 涉及到了文件引用的路径层级改变的问题。
const userRouter = require('../router/user.route') 复制代码
抽离出controller
route中的处理函数这块拆分出来
新建controller文件夹,在其下面新建
user.controller.js
// 写成一个类 class UserController{ async register(ctx, next){ ctx.body = '用户注册成功' } } // 导出实例化的对象 module.exports = new UserController() 复制代码
user.route.js
const Router = require('koa-router') // 引入controller const { register } = require('../controller/user.controller') const router = new Router({prefix:'/users'}) // 注册接口 router.post('/register',register) // 导出 module.exports = router 复制代码
使用postman测试一下
作者:csdn来挖墙脚
链接:https://juejin.cn/post/7033219374504771591