阅读 264

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启,在浏览器访问端口,

image.png

自动启动配置文件 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文件(存一些项目配置的环境变量)

image.png 然后新建 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  image.png

不要 紧的 我们再看看github上有没有 ✈️

image.png

使用步骤:

  1. 导入包  引入koa-router

const Router = require('koa-router') 复制代码

  1. 实例化对象

const indexRouter =  new Router() 复制代码

  1. 编写路由

indexRouter.get('/',(ctx, next)=>{     ctx.body = 'hello index' }) 复制代码

  1. 注册中间件

  • 把router和app关联起来,通过router.routes()方法去注册中间键。

  • router 是一个对象,但是我们app.use()只能接收一个函数作为参数。

// 必须是一个函数 app.use(indexRouter) app.use(indexRouter.routes()) 复制代码

image.png

抽离出路由文件

假如我们有一类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中 涉及到了文件引用的路径层级改变的问题。 image.png

const userRouter = require('../router/user.route') 复制代码

抽离出controller

image.png route中的处理函数这块拆分出来 image.png

新建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测试一下

image.png


作者:csdn来挖墙脚
链接:https://juejin.cn/post/7033219374504771591


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐