创建Koa
第一步Koa项目初始化
使用命令npm init -y 进行初始化生成package.json文件,用于记录项目依赖。
第二步安装Koa框架
使用命令npm install --save koa或npm i koa进行安装
安装成功之后会有node_modules文件夹,里面有koa的一些依赖包。
第三步创建一个入口文件
创建一个自定义名js文件。
第四步编写基础代码
1.在入口文件index.js中导入koa包
const Koa = require('koa')
2.实例化对象
const app =new Koa()
3.使用中间件use
app.use(async ctx =>{
//body 返回内容
ctx.body = "这是Koa"
})
4.设置端口号
app.listen(3000)
使用node 文件名运行,这里如果不是在根目录,而在其他目录下还要加上目录路径如:node src/文件名。注意运行成功没有提示,不报错就是运行成功。
浏览器输入:http://localhost:3000 页面显示这是Koa。
第五步自重启
原先代码:
app.use(async ctx =>{
//body 返回内容
ctx.body = "这是Koa"
})
修改之后:
app.use(async ctx =>{
//body 返回内容
ctx.body = "这是Koa,请刷新"
})
刷新页面之后,页面依旧显示这是Koa。要改变页面内容只能重新启动node 文件名。
使用nodemon解决这个问题,命令:npm i nodemon
安装好nodemon之后打开package.json
在scripts中加入配置:
"scripts": {
"start":"nodemon ./index.js",
"test": "echo \"Error: no test specified\" && exit 1"
}
使用命令:npm i dotenv 管理配置信息,将读取.env文件中的配置文件转为 process.env变量的值。
两个依赖包安装好之后,在项目根目录创建一个.env配置文件
.env中进行配置参数
NODE_ENV = dev
SERVER_PORT = 3000
创建一个单独的配置文件config
config.js中代码
//通过dotenv这个工具将env里的配置加载环境变量中
const Dotenv = require('dotenv')
Dotenv.config()
module.exports = process.env
index.js中代码
const { SERVER_PORT } = require('./config/config')
app.listen(SERVER_PORT)
使用npm run start打开之后,刷新页面就会改变内容
关于next
代码:
const r1 = function async(ctx,next){
console.log("这是r1")
}
const r2 = function async(ctx,next){
console.log("这是r2")
}
const r3 = function async(ctx,next){
console.log("这是r3")
}
app.use(r1)
app.use(r2)
app.use(r3)
打印的结果是:这是r1
代码:
const r1 = function async(ctx,next){
console.log("这是r1")
next()
}
const r2 = function async(ctx,next){
console.log("这是r2")
}
const r3 = function async(ctx,next){
console.log("这是r3")
}
app.use(r1)
app.use(r2)
app.use(r3)
输出结果:这是r1 这是r2
代码:
const r1 = function async(ctx,next){
console.log("这是r1")
}
const r2 = function async(ctx,next){
console.log("这是r2")
next()
}
const r3 = function async(ctx,next){
console.log("这是r3")
}
app.use(r1)
app.use(r2)
app.use(r3)
输出结果:这是r1
由此可以看出next作用是使得后面的中间件可以执行。出现next就把中间文交到下一个中间件处理,如果没有next,就认为本次请求终止
代码:
const r1 = function async(ctx,next){
console.log("这是1")
next()
console.log("1又回来了")
}
const r2 = function async(ctx,next){
console.log("这是2")
next()
}
const r3 = function async(ctx,next){
console.log("这是3")
next()
console.log("3又回来了")
}
app.use(r1)
app.use(r2)
app.use(r3)
输出结果:这是1 这是2 这是3 3又回来了 1又回来了
next执行完之后会回调,执行next后面的内容。
app.use执行顺序
const r1 = function async(ctx,next){
console.log(1)
next()
}
const r2 = function async(ctx,next){
console.log(2)
next()
}
const r3 = function async(ctx,next){
console.log(3)
next()
}
app.use(r3)
app.use(r1)
app.use(r2)
输出结果:3 1 2
由此看出先引用的中间件,最先执行
中间件使用
koa-router
用于根据不同接口返回不同数据。
使用命令:npm install -S koa-router
导入依赖包
const Koa = require('koa')
const Router = require('koa-router')
创建实例
const app =new Koa()
const router =new Router()
使用:
//get方式请求路径,进行处理
router.get('/',ctx=>{
ctx.body="world"
})
router.get('/api',ctx=>{
ctx.body="API"
})
//中间件通过use注册到app中
//router.routes()将路由内所有方法添加进去 router.allowedMethods()拦截器
//app.use只能接受一个函数作为参数,所以需要router.routes()返回一个函数
app.use(router.routes()).use(router.allowedMethods)
运行效果:
优化router
创建一个路由文件夹
创建一个功能模块js
功能模块代码块:
const Router = require('koa-router')
//{prefix:'/user'}统一的前缀 /user , /user/data ,/user/updata
const router = new Router({prefix:'/user'})
// /data , /updata
router.get('/',(ctx,next)=>{
ctx.body="user"
})
module.exports = router
index.js调用功能模块js
const koa = require('koa')
const Router = require('koa-router')
const { SERVER_PORT } = require('./config/config')
//调用user接口数据
const userRouter= require('./router/UserRouter')
const app =new koa()
//注册中间件
app.use(userRouter.routes())
app.listen(SERVER_PORT)
本文章用于学习记录,有错误地方请多指正,谢谢。