发布于2021-03-08 19:57 阅读(1354) 评论(0) 点赞(13) 收藏(4)
Koa 是基于 Node.js 平台的下一代 web 开发框架。
Koa是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 使用 Koa 编写 web 应用,可以免除重复繁琐的回调函数嵌套, 并极大地提升错误处理的效率。Koa不在内核方法中绑定任何中间件, 它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手,开发思路和 Express 差不多,最大的特点就是可以避免异步嵌套
- // 引入Koa
- var koa = require('koa');
- // 实例化Koa
- var app = new koa();
-
- app.use( async(ctx)=>{
- ctx.body = "hello,koa"
- });
-
- // 监听端口
- app.listen(3000);
- // 1.安装 npm install --save koa-router
-
- var Koa = require('koa');
- // 2.引入路由并实例化
- var Router = require('koa-router');
- var app = new Koa();
- var router = new Router();
-
- // 路由路径前缀设置
- router.prefix('/api')
-
- // 3.配置路由
- router.get('/get', async (ctx) => { // 路径: /api/get
- // 返回数据给前端
- ctx.body = "返回响应数据";
- });
-
- // 4.启动路由(来自于官方文档);
- // router.allowedMethods()可以配置也可以不配置。
- // 如果之前的没有设置响应头,配置此选项以后可以自动设置响应头。
- app.use(router.routes()).use(router.allowedMethods());
-
- // 监听端口
- app.listen(3000);
中间件是配合路由匹配完成做的一系列的操作,我们就可以把它叫做中间件。Koa中运用中间件可以实现以下一些功能:
(1).添加应用。主要通过app.use()这个函数添加或是启动一些应用,如常见的一些第三方中间件的使用。
(2)匹配路由。主要通过next()这个函数完成多级路由匹配。
(3)错误处理。如果当前访问的路由一直向下匹配没有匹配到,可以通过中间件给出错误响应。
- var Koa = require('koa');
- var Router = require('koa-router');
- var app = new Koa();
- var router = new Router();
- // Koa 错误处理中间件
- // 无论app.use放到路由前面还是后面
- // 都是先执行app.use再去执行路由
- app.use(async (ctx, next) => {
- console.log('这是一个中间件'); // 执行顺序1
- await next();
- if (ctx.status == 404) { // 执行顺序3
- ctx.body = '这是一个404页面';
- } else {
- console.log(ctx.url);
- }
- });
- // 配置新闻页 // 执行顺序2
- router.get('/news', async (ctx, next) => {
- console.log('这是新闻路由');
- await next();
- });
-
- app.use(router.routes());
- app.use(router.allowedMethods());
-
- app.listen(3000);
介绍:
koa-body //处理request过来的请求里面的数据
@koa/cors //处理一些跨域请求
安装:
npm install -S koa-body @koa/cors
使用:
- var Koa = require('koa');
- var Router = require('koa-router');
- var cors = require('@koa/cors');
- var koabody = require('koa-body');
-
- var app = new Koa();
- var router = new Router();
-
- router.post('/post', async (ctx, next) => {
- let {body}=ctx.request;//获取前端给的值
- ctx.body={//把body里面前端给的内容再返回给前端
- ...body
- }
- });
-
- //app.use注意顺序
- app.use(koaBody())//处理request过来的请求里面的数据
- app.use(cors())//处理一些跨域请求
-
- app.use(router.routes())
- .use(router.allowedMethods());
-
- app.listen(3000);
Koa中的get传值主要有以下两种方式:
(1).键值对拼接传参,接收参数主要通过ctx.qruery获取,需要注意的是在ctx与ctx.request里均可以获得一样的结果。
- var Koa = require('koa');
- var router = require('koa-router')();
- var app = new Koa();
- // http://localhost:3000/details?id=1&name=jiangyx
- router.get('/details',async(ctx)=>{
- // 从ctx中读取Get传值
- console.log(ctx.url);// /details?id=1&name=jiangyx
- console.log(ctx.query); // { id: '1', name: 'jiangyx' } // 获取的是对象,用的最多的方式
- console.log(ctx.querystring) // id=1&name=jiangyx // 获取的是字符串
-
- // 从ctx里的request里获取Get传值
- console.log(ctx.request.url); // /details?id=1&name=jiangyx
- console.log(ctx.request.query); // { id: '1', name: 'jiangyx' }
- console.log(ctx.request.querystring); // id=1&name=jiangyx
- });
-
- app.use(router.routes());
- app.use(router.allowedMethods());
- app.listen(3000);
(2).动态路由传参,接收参数主要通过ctx.params获取。
- var Koa = require('koa');
- var router = require('koa-router')();
- var app = new Koa();
-
- // http://localhost:3000/details/1/jiangyx
- router.get('/details/:id/:name', async (ctx) => {
- // 获取动态路由的传值
- console.log(ctx.params); // { id: '1' ,name:'jiangyx'}
- });
-
- app.use(router.routes());
- app.use(router.allowedMethods());
- app.listen(3000);
介绍:按照json格式数据的传输
安装:
npm install -S koa-json
使用:
- 。。。。。
- var json = require('koa-json');
- 。。。。。
-
- app.use(json({ pretty: false, param: 'pretty' }));
- 。。。。
-
-
-
- //案例:
-
- http://localhost:3000/details?id=1&name=jiangyx
- 返回结果:{"foo":"bar"}
-
- 路径加pretty
- http://localhost:3000/details?id=1&name=jiangyx&pretty
- 返回结果:
- {
- "foo": "bar"
- }
- // 安装:npm install koa-combine-routers
-
- // app.js
- const Koa = require('koa')
- const router = require('./routes')
-
- const app = new Koa()
-
- app.use(router())
-
-
- // routers.js
- const Router = require('koa-router')
- const combineRouters = require('koa-combine-routers')
-
- const dogRouter = new Router()
- const catRouter = new Router()
-
- dogRouter.get('/dogs', async ctx => {
- ctx.body = 'ok'
- })
-
- catRouter.get('/cats', async ctx => {
- ctx.body = 'ok'
- })
-
- const router = combineRouters(
- dogRouter,
- catRouter
- )
-
- module.exports = router
- 安装:npm install koa-helmet -S
-
- 使用:
- const Koa = require("koa");
- const helmet = require("koa-helmet");
- const app = new Koa();
-
- app.use(helmet());
-
- app.use((ctx) => {
- ctx.body = "Hello World"
- });
-
- app.listen(4000);
- 安装:npm install -S koa-static
-
- 使用:
- const serve = require('koa-static');
- const Koa = require('koa');
- const app = new Koa();
-
- // $ GET /package.json
- app.use(serve('.'));
-
- // $ GET /hello.txt
- app.use(serve('test/fixtures'));
-
- // or use absolute paths
- app.use(serve(__dirname + '/test/fixtures'));
-
- app.listen(3000);
-
- console.log('listening on port 3000');
- import koa from 'koa'
- import path from 'path'
- import helmet from 'koa-helmet'
- import statics from 'koa-static'
- import router from './routes/routes'//合并路由后的routers.js
- import koaBody from 'koa-body'
- import jsonutil from 'koa-json'
- import cors from '@koa/cors'
- import compose from 'koa-compose'
-
- const app = new koa()
-
- // app.use...
- // app.use(helmet())
- // app.use(statics(path.join(__dirname, '../public')))
- // app.use(router())
- const middleware = compose([
- koaBody(),
- statics(path.join(__dirname,'../public')),
- cors(),
- jsonutil({pretty: false, param:'pretty'}),
- helmet()
- ])
-
- app.use(middleware)
- app.use(router())
-
- app.listen(3000);
- import koa from 'koa'
- import path from 'path'
- import helmet from 'koa-helmet'
- import statics from 'koa-static'
- import router from './routes/routes'//合并路由后的routers.js
- import koaBody from 'koa-body'
- import jsonutil from 'koa-json'
- import cors from '@koa/cors'
- import compose from 'koa-compose'
- import compress from 'koa-compress'
-
-
- const app = new koa()
-
- const isDevMode=process.env.NODE_ENV==='production'?false:true
-
- const middleware = compose([
- koaBody(),
- statics(path.join(__dirname,'../public')),
- cors(),
- jsonutil({pretty: false, param:'pretty'}),
- helmet()
- ])
-
- if(!isDevMode){
- app.use(compress())
- }
-
- app.use(middleware)
- app.use(router())
-
- app.listen(3000);
nodemon是一种工具,可以自动检测到目录中的文件更改时通过重新启动应用程序来调试基于node.js的应用程序。
- // 安装
- npm install -g nodemon
- //或
- npm install --save-dev nodemon
-
-
- // 使用
- nodemon ./main.js // 启动node服务
- nodemon ./main.js localhost 6677 // 在本地6677端口启动node服务
- "start": "nodemon src/main.ts",//在package.json中使用
nodemon是利用common.js语法执行的进行监视的,我们如何支持es6的语法进行监视执行呢?
"start": "nodemon --exec babel-node src/main.ts",
- // 1.npm install --save mysql
-
- // 2.引入模块
- const mysql = require('mysql');
-
- // 3.连接数据库
- const connection = mysql.createConnection({
- host: '127.0.0.1', // 数据库地址
- user: 'root', // 用户名
- password: '123456' , // 密码
- database: 'my_data' // 数据库名称
- })
-
- // 4.执行sql语句操作数据库
- connection.query('SELECT * FROM user',
- (error, results, fields) => {
- if (error) {
- console.log(error)
- };
- // 操作数据
-
- // 结束会话
- connection.release();
- }
- );
注意,数据库会话操作执行完后,需要关闭掉,以免占用连接资源。
当有多个会话需要操作数据库时,为了避免每次会话都要重新连接,所以这时候就需要连接池管理会话。
- // 1.npm install --save mysql
-
- // 2.引入模块
- const mysql = require('mysql');
-
- // 3.创建数据池
- const pool = mysql.createPool({
- host: '127.0.0.1', // 数据库地址
- user: 'root', // 用户名
- password: '123456', // 密码
- database: 'my_data' // 数据库名称
- })
-
- // 4.在数据池中进行会话操作
- pool.getConnection(function (err, connection) {
- // 5.执行sql语句操作数据库
- connection.query('SELECT * FROM user',
- (error, results, fields) => {
-
- // 执行操作
-
- // 释放连接
- connection.release();
- // 如果有错误就抛出
- if (error) {
- throw error;
- }
- }
- )
- })
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/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!