本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(4)

koa框架的基本使用

发布于2021-03-08 19:57     阅读(1354)     评论(0)     点赞(13)     收藏(4)


1.Koa介绍

Koa 是基于 Node.js 平台的下一代 web 开发框架。

Koa是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 使用 Koa 编写 web 应用,可以免除重复繁琐的回调函数嵌套, 并极大地提升错误处理的效率。Koa不在内核方法中绑定任何中间件, 它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手,开发思路和 Express 差不多,最大的特点就是可以避免异步嵌套

2.Koa的安装和基本使用

 

(1)koa的基本使用:

  1. // 引入Koa
  2. var koa = require('koa');
  3. // 实例化Koa
  4. var app = new koa();
  5. app.use( async(ctx)=>{
  6. ctx.body = "hello,koa"
  7. });
  8. // 监听端口
  9. app.listen(3000);

(2)koa路由的使用:

  1. // 1.安装 npm install --save koa-router
  2. var Koa = require('koa');
  3. // 2.引入路由并实例化
  4. var Router = require('koa-router');
  5. var app = new Koa();
  6. var router = new Router();
  7. // 路由路径前缀设置
  8. router.prefix('/api')
  9. // 3.配置路由
  10. router.get('/get', async (ctx) => { // 路径: /api/get
  11. // 返回数据给前端
  12. ctx.body = "返回响应数据";
  13. });
  14. // 4.启动路由(来自于官方文档);
  15. // router.allowedMethods()可以配置也可以不配置。
  16. // 如果之前的没有设置响应头,配置此选项以后可以自动设置响应头。
  17. app.use(router.routes()).use(router.allowedMethods());
  18. // 监听端口
  19. app.listen(3000);

(3)Koa中间件

中间件是配合路由匹配完成做的一系列的操作,我们就可以把它叫做中间件。Koa中运用中间件可以实现以下一些功能:

(1).添加应用。主要通过app.use()这个函数添加或是启动一些应用,如常见的一些第三方中间件的使用。
(2)匹配路由。主要通过next()这个函数完成多级路由匹配。
(3)错误处理。如果当前访问的路由一直向下匹配没有匹配到,可以通过中间件给出错误响应。

  1. var Koa = require('koa');
  2. var Router = require('koa-router');
  3. var app = new Koa();
  4. var router = new Router();
  5. // Koa 错误处理中间件
  6. // 无论app.use放到路由前面还是后面
  7. // 都是先执行app.use再去执行路由
  8. app.use(async (ctx, next) => {
  9. console.log('这是一个中间件'); // 执行顺序1
  10. await next();
  11. if (ctx.status == 404) { // 执行顺序3
  12. ctx.body = '这是一个404页面';
  13. } else {
  14. console.log(ctx.url);
  15. }
  16. });
  17. // 配置新闻页 // 执行顺序2
  18. router.get('/news', async (ctx, next) => {
  19. console.log('这是新闻路由');
  20. await next();
  21. });
  22. app.use(router.routes());
  23. app.use(router.allowedMethods());
  24. app.listen(3000);

(4)使用koa-body和@koa/cors

介绍:
koa-body  //处理request过来的请求里面的数据
@koa/cors  //处理一些跨域请求

安装:

npm install -S koa-body @koa/cors

使用:

(5)Koa中post传值的获取

  1. var Koa = require('koa');
  2. var Router = require('koa-router');
  3. var cors = require('@koa/cors');
  4. var koabody = require('koa-body');
  5. var app = new Koa();
  6. var router = new Router();
  7. router.post('/post', async (ctx, next) => {
  8. let {body}=ctx.request;//获取前端给的值
  9. ctx.body={//把body里面前端给的内容再返回给前端
  10. ...body
  11. }
  12. });
  13. //app.use注意顺序
  14. app.use(koaBody())//处理request过来的请求里面的数据
  15. app.use(cors())//处理一些跨域请求
  16. app.use(router.routes())
  17. .use(router.allowedMethods());
  18. app.listen(3000);

(6)Koa中get传值及获取get传值

Koa中的get传值主要有以下两种方式:

(1).键值对拼接传参,接收参数主要通过ctx.qruery获取,需要注意的是在ctx与ctx.request里均可以获得一样的结果。

  1. var Koa = require('koa');
  2. var router = require('koa-router')();
  3. var app = new Koa();
  4. // http://localhost:3000/details?id=1&name=jiangyx
  5. router.get('/details',async(ctx)=>{
  6. // 从ctx中读取Get传值
  7. console.log(ctx.url);// /details?id=1&name=jiangyx
  8. console.log(ctx.query); // { id: '1', name: 'jiangyx' } // 获取的是对象,用的最多的方式
  9. console.log(ctx.querystring) // id=1&name=jiangyx // 获取的是字符串
  10. // 从ctx里的request里获取Get传值
  11. console.log(ctx.request.url); // /details?id=1&name=jiangyx
  12. console.log(ctx.request.query); // { id: '1', name: 'jiangyx' }
  13. console.log(ctx.request.querystring); // id=1&name=jiangyx
  14. });
  15. app.use(router.routes());
  16. app.use(router.allowedMethods());
  17. app.listen(3000);

(2).动态路由传参,接收参数主要通过ctx.params获取。

  1. var Koa = require('koa');
  2. var router = require('koa-router')();
  3. var app = new Koa();
  4. // http://localhost:3000/details/1/jiangyx
  5. router.get('/details/:id/:name', async (ctx) => {
  6. // 获取动态路由的传值
  7. console.log(ctx.params); // { id: '1' ,name:'jiangyx'}
  8. });
  9. app.use(router.routes());
  10. app.use(router.allowedMethods());
  11. app.listen(3000);

(7)koa-json的使用

介绍:按照json格式数据的传输

安装:

npm install -S koa-json

使用:

  1. 。。。。。
  2. var json = require('koa-json');
  3. 。。。。。
  4. app.use(json({ pretty: falseparam: 'pretty' }));
  5. 。。。。
  6. //案例:
  7. http://localhost:3000/details?id=1&name=jiangyx
  8. 返回结果:{"foo":"bar"}
  9. 路径加pretty
  10. http://localhost:3000/details?id=1&name=jiangyx&pretty
  11. 返回结果:
  12. {
  13.   "foo""bar"
  14. }

(8)合并路由(路由压缩):koa-combine-routers

  1. // 安装:npm install koa-combine-routers
  2. // app.js
  3. const Koa = require('koa')
  4. const router = require('./routes')
  5. const app = new Koa()
  6. app.use(router())
  7. // routers.js
  8. const Router = require('koa-router')
  9. const combineRouters = require('koa-combine-routers')
  10. const dogRouter = new Router()
  11. const catRouter = new Router()
  12. dogRouter.get('/dogs', async ctx => {
  13. ctx.body = 'ok'
  14. })
  15. catRouter.get('/cats', async ctx => {
  16. ctx.body = 'ok'
  17. })
  18. const router = combineRouters(
  19. dogRouter,
  20. catRouter
  21. )
  22. module.exports = router

(9)加入安全头:koa-helmet

  1. 安装:npm install koa-helmet -S
  2. 使用:
  3. const Koa = require("koa");
  4. const helmet = require("koa-helmet");
  5. const app = new Koa();
  6. app.use(helmet());
  7. app.use((ctx) => {
  8. ctx.body = "Hello World"
  9. });
  10. app.listen(4000);

(10)静态资源:koa-static

  1. 安装:npm install -S koa-static
  2. 使用:
  3. const serve = require('koa-static');
  4. const Koa = require('koa');
  5. const app = new Koa();
  6. // $ GET /package.json
  7. app.use(serve('.'));
  8. // $ GET /hello.txt
  9. app.use(serve('test/fixtures'));
  10. // or use absolute paths
  11. app.use(serve(__dirname + '/test/fixtures'));
  12. app.listen(3000);
  13. console.log('listening on port 3000');

(11)使用koa-compose集成中间件

  1. import koa from 'koa'
  2. import path from 'path'
  3. import helmet from 'koa-helmet'
  4. import statics from 'koa-static'
  5. import router from './routes/routes'//合并路由后的routers.js
  6. import koaBody from 'koa-body'
  7. import jsonutil from 'koa-json'
  8. import cors from '@koa/cors'
  9. import compose from 'koa-compose'
  10. const app = new koa()
  11. // app.use...
  12. // app.use(helmet())
  13. // app.use(statics(path.join(__dirname, '../public')))
  14. // app.use(router())
  15. const middleware = compose([
  16. koaBody(),
  17. statics(path.join(__dirname,'../public')),
  18. cors(),
  19. jsonutil({pretty: false, param:'pretty'}),
  20. helmet()
  21. ])
  22. app.use(middleware)
  23. app.use(router())
  24. app.listen(3000);

(12)koa-compress压缩数据

  1. import koa from 'koa'
  2. import path from 'path'
  3. import helmet from 'koa-helmet'
  4. import statics from 'koa-static'
  5. import router from './routes/routes'//合并路由后的routers.js
  6. import koaBody from 'koa-body'
  7. import jsonutil from 'koa-json'
  8. import cors from '@koa/cors'
  9. import compose from 'koa-compose'
  10. import compress from 'koa-compress'
  11. const app = new koa()
  12. const isDevMode=process.env.NODE_ENV==='production'?false:true
  13. const middleware = compose([
  14. koaBody(),
  15. statics(path.join(__dirname,'../public')),
  16. cors(),
  17. jsonutil({pretty: false, param:'pretty'}),
  18. helmet()
  19. ])
  20. if(!isDevMode){
  21. app.use(compress())
  22. }
  23. app.use(middleware)
  24. app.use(router())
  25. app.listen(3000);

(13)nodemon

nodemon是一种工具,可以自动检测到目录中的文件更改时通过重新启动应用程序来调试基于node.js的应用程序。

  1. // 安装
  2. npm install -g nodemon
  3. //或
  4. npm install --save-dev nodemon
  5. // 使用
  6. nodemon ./main.js // 启动node服务
  7. nodemon ./main.js localhost 6677 // 在本地6677端口启动node服务
  8. "start": "nodemon src/main.ts",//在package.json中使用

nodemon是利用common.js语法执行的进行监视的,我们如何支持es6的语法进行监视执行呢?

"start": "nodemon --exec babel-node src/main.ts",

(14)Koa操作MySQL数据库

  1. // 1.npm install --save mysql
  2. // 2.引入模块
  3. const mysql = require('mysql');
  4. // 3.连接数据库
  5. const connection = mysql.createConnection({
  6. host: '127.0.0.1', // 数据库地址
  7. user: 'root', // 用户名
  8. password: '123456' , // 密码
  9. database: 'my_data' // 数据库名称
  10. })
  11. // 4.执行sql语句操作数据库
  12. connection.query('SELECT * FROM user',
  13. (error, results, fields) => {
  14. if (error) {
  15. console.log(error)
  16. };
  17. // 操作数据
  18. // 结束会话
  19. connection.release();
  20. }
  21. );

注意,数据库会话操作执行完后,需要关闭掉,以免占用连接资源。

当有多个会话需要操作数据库时,为了避免每次会话都要重新连接,所以这时候就需要连接池管理会话。

  1. // 1.npm install --save mysql
  2. // 2.引入模块
  3. const mysql = require('mysql');
  4. // 3.创建数据池
  5. const pool = mysql.createPool({
  6. host: '127.0.0.1', // 数据库地址
  7. user: 'root', // 用户名
  8. password: '123456', // 密码
  9. database: 'my_data' // 数据库名称
  10. })
  11. // 4.在数据池中进行会话操作
  12. pool.getConnection(function (err, connection) {
  13. // 5.执行sql语句操作数据库
  14. connection.query('SELECT * FROM user',
  15. (error, results, fields) => {
  16. // 执行操作
  17. // 释放连接
  18. connection.release();
  19. // 如果有错误就抛出
  20. if (error) {
  21. throw error;
  22. }
  23. }
  24. )
  25. })

(15)断点调试

nodejs在Chrome 中断点调试:https://blog.csdn.net/xiasohuai/article/details/90551504

nodejs在vscode 中断点调试:https://blog.csdn.net/xiasohuai/article/details/90551380

webpack打包过程如何调试(浏览器):https://blog.csdn.net/xiasohuai/article/details/107889879

 

 

 

 

 

 

 

原文链接:https://blog.csdn.net/xiasohuai/article/details/114483975




所属网站分类: 技术文章 > 博客

作者:天使的翅膀

链接:http://www.qianduanheidong.com/blog/article/33652/1cd456a7f46e1b0c8296/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

13 0
收藏该文
已收藏

评论内容:(最多支持255个字符)