话不多说 我们直入正题
什么是Koa?
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
首先如何启动一个koa项目
1.创建一个新项目
2.npm init -y初始化package.json文件
npm init -y
3.通过终端或者命令用npm 或者yarn去安装koa、koa-router到dependencies
npm install koa
npm install koa-router
4.安转nodemon
npm add nodemon -D
5.添加一条npm scripts命令,"start":"nodemon app.js",npm run start即可启动服务
{
"name": "koaa",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon app.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"koa": "^2.13.4",
"koa-router": "^10.1.1"
},
"devDependencies": {
"nodemon": "^2.0.15"
}
}
一个Koa项目创建完毕~
接下来就开始上代码
创建app.js
const Koa = require('koa');
const Router = require('koa-router');
//koa实例化
const app = new Koa();
const router = new Router();
router.get('/home',async ctx=>{
ctx.body="hello World111";
})
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000,()=>{
console.log('服务启动了')
})
然后我们启动服务
npm run start
这时项目已经启动了......
基础koa服务的目录结构
拆分路由模块
- 创建一个router的文件夹
- 创建一个user.js
app.js
const Koa = require('koa');
const Router = require('koa-router');
const user = require('./router/user.js')
//koa实例化
const app = new Koa();
const router = new Router();
// 总路由添加前缀/api,总地址变为http://localhost:3000/api
router.prefix('/api')
router.get('/',async ctx=>{
ctx.body="hello World111";
})
// 子路由添加前缀/users,最后访问地址变为http://localhost:3000/api/users/user
router.use('/users',user.routes());
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000,()=>{
console.log('服务启动了')
})
router/user.js
const router = require('koa-router')();
router.get('/user', (ctx) => {
ctx.body = {name:'gaoxilong'};
})
router.get('/userlist', (ctx) => {
ctx.body = [{name:'zhangsan'},{name:'lisi'}]
})
module.exports = router;
然后我们就可已在网页上
就可以看到自己写的数据信息了
多个子路由模块加载,如何优化?
我把app.js跟/router/user.js重新整理了下
在router下新建index.js,是我们分装优化代码
router/index.js
const fs = require('fs');
module.exports = (app) => {
fs.readdirSync(__dirname).forEach(file => {
if (file === 'index.js') return false;
const router = require(`./${file}`);
router.prefix('/api')
app.use(router.routes()).use(router.allowedMethods());
})
}
router/user.js
const Router = require('koa-router');
const router = new Router({ prefix: '/users' });
router.get('/user', (ctx) => {
ctx.body = {name:'gaoxilong'};
})
router.get('/userlist', (ctx) => {
ctx.body = [{name:'zhangsan'},{name:'lisi'}]
})
module.exports = router;
app.js
const Koa = require('koa');
const Router = require('koa-router')
const routing = require('./router/index')
// 实例化
const app = new Koa();
const router = new Router();
router.get('/', async ctx => {
ctx.body = 'hello world'
})
routing(app);
app.listen(3000, () => {
console.log('你好,我正在监听3000的端口号')
})
然后我们在浏览器上输入端口依然是可以监听到的