首页 > 其他分享 >基于Koa2框架的项目搭建及实战开发

基于Koa2框架的项目搭建及实战开发

时间:2022-11-10 22:35:50浏览次数:66  
标签:实战 const 创建 ctx js student Koa2 data 搭建

基于Koa2框架的项目搭建及实战开发

Koa是基于 Node.js 平台的下一代 web 开发框架,由express原班人马打造,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。

此文是简单介绍使用kos2进行项目的基本搭建以及api的简单开发

搭建环境

1.因为此框架是基于node.js的,安装node是必须的进行的第一步,这里不再详细介绍

2.安装koa(我们使用淘宝镜像进行安装)

1 npm install koa --save

3.安装koa2项目生成器并创建项目

1 2 3 4 cnpm install koa-generator -g koa2 myPro cd myPro cnpm install
1 koa2 myPro用来生成项目的基本的项目架构

4.启动项目服务

1 npm start 

访问 http://localhost:3000/

这是项目搭建成功的初始页面

搭建项目

接下来进行实战项目的基本搭建

1.安装sequelize(Sequelize是一个基于promise的nodejs ORM,目前支持Postgres、mysql、SQLite和Microsoft SQL Server。它具有强大的事务支持,关联关系,读取和复制等功能。)

1 cnpm install sequelize --save

2.安装mysql、mysql2

项目使用的是mysql的数据库

1 cnpm install mysql mysql2 --save

3.配置Sequelize的数据库链接

在项目的根目录下创建一个config目录,config目录中创建db.js,该文件主要用来创建mysql的数据库链接的。

/config/db.js

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 const Sequelize = require('sequelize'); const sequelize = new Sequelize('test','root','123456',{     host:'182.61.15.43',     dialect:'mysql',     operatorsAliases:false,     dialectOptions:{         //字符集         charset:'utf8mb4',         collate:'utf8mb4_unicode_ci',         supportBigNumbers: true,         bigNumberStrings: true     },     pool:{         max: 5,         min: 0,         acquire: 30000,         idle: 10000     },     timezone: '+08:00'  //东八时区 });   module.exports = {     sequelize };

其中test为数据库名称,root为数据库用户名,123456为数据库密码,这是我自己搭建的服务器

4.创建schema、modules、controllers

schema:数据表模型实例
modules:实体模型
controllers:控制器

3个目录下分别创建student.js(有点像thinkPhp5的框架目录)

5.schema数据表模型
在schema目录下新建一个student.js文件,该文件的主要作用就是建立与数据表的对应关系,也可以理解为代码的建表。

schema/student.js

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 const moment = require("moment"); module.exports = function(sequelize,DataTypes){     return sequelize.define('student',{         id:{             type: DataTypes.INTEGER,             primaryKey: true,             allowNull: true,             autoIncrement: true         },         //学生姓名         name:{             type: DataTypes.STRING,             allowNull: false,             field: 'name'         },         //年龄         age:{             type: DataTypes.INTEGER,             allowNull: false,             field: 'age'         },         //性别         gender:{             type: DataTypes.STRING,             allowNull: false,             field:'gender'         },         //分数         grade:{             type: DataTypes.STRING,             allowNull: false,             field: 'grade'         },         // 创建时间         createdAt:{             type: DataTypes.DATE         },         // 更新时间         updatedAt:{             type: DataTypes.DATE         }     },{         /**          * 如果为true,则表示名称和model相同,即user          * 如果为fasle,mysql创建的表名称会是复数,即users          * 如果指定的表名称本身就是复数,则形式不变          */         freezeTableName: true     }); }

6.模型应用、使用
在项目中modules目录下创建student.js文件,为学生信息表,该文件为文章的实例。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 // 引入mysql的配置文件 const db = require('../config/db');   // 引入sequelize对象 const Sequelize = db.sequelize;   // 引入数据表模型 const student = Sequelize.import('../schema/student'); student.sync({force: false}); //自动创建表   class studentModel {     /**      * 创建学生表模型      * @param data      * @returns {Promise<*>}      */     static async createStudent(data){         return await student.create({             name: data.name, //姓名             age: data.age,  //年龄             gender: data.gender,  //性别             grade: data.grade //分数         });     }       /**      * 查询学生信息的详情      * @param id 学生信息ID      * @returns {Promise<Model>}      */     static async getStudentDetail(id){         return await student.findOne({             where:{                 id             }         });     } }   module.exports = studentModel;

7controller 控制器
控制器的主要作用为功能的处理,项目中controller目录下创建article.js,代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 const StudentModel = require("../modules/student");   class studentController {     /**      * 创建学生信息      * @param ctx      * @returns {Promise.<void>}      */     static async create(ctx){         //接收客服端         let req = ctx.request.body;         if(req.name && req.age && req.gender && req.grade){             try{                 //创建学生信息模型                 const ret = await StudentModel.createStudent(req);                 //使用刚刚创建的学生信息ID查询学生信息详情,且返回学生信息详情信息                 const data = await StudentModel.getStudentDetail(ret.id);                   ctx.response.status = 200;                 ctx.body = {                     code: 200,                     msg: '创建学生信息成功',                     data                 }             }catch(err){                 ctx.response.status = 412;                 ctx.body = {                     code: 412,                     msg: '创建学生信息失败',                     data: err                 }             }         }else {             ctx.response.status = 416;             ctx.body = {                 code: 200,                 msg: '参数不齐全'             }         }     }       /**      * 获取文章详情      * @param ctx      * @returns {Promise.<void>}      */     static async detail(ctx){         let id = ctx.params.id;         if(id){             try{                 // 查询学生信息详情模型                 let data = await StudentModel.getStudentDetail(id);                 ctx.response.status = 200;                 ctx.body = {                     code: 200,                     msg: '查询成功',                     data                 }             }catch(err){                 ctx.response.status = 412;                 ctx.body = {                     code: 412,                     msg: '查询失败',                     data                 }             }         }else {             ctx.response.status = 416;             ctx.body = {                 code: 416,                 msg: '学生ID必须传'             }         }     } }   module.exports = studentController;

8.路由

路由,也可以简单理解为路径,主要是作为请求的url,请求的路径来处理一些请求,返回数据。一般情况下,基于node的项目,路由都是在一个叫做routes的目录下面。

routes目录下创建student.js,代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 const router = require('koa-router')() // 学生 const StudentController = require('../controllers/student');   router.prefix('/student') /**  * 学生接口  */ //创建学生 router.post('/student/create',StudentController.create); //获取学生详情 router.get('/student/:id',StudentController.detail)   module.exports = router

然后在app.js添加如下内容

1 2 const student = require('./routes/student') app.use(student.routes(), student.allowedMethods())
9.启动项目服务

如果启动过程中出现上图的结果,说明服务启动成功

接下来,就可以测试接口了。

10.解决跨域
跨域是web开发中不可避免的一个必须要解决的问题了。跨域问题,主要是要解决服务器端的通信问题。在node的开发中,只需要实现一个CORS标准就可以了。

1 cnpm install koa-cors --save

然后在根目录下的app.js加入koa-cors的引用:

1 2 const cors = require('koa-cors') app.use(cors()) //使用cors

然后重新启动服务。

接下来使用postman进行接口的测试

接口返回成功

使用Navicat查看test数据库下面的表,如图

已经在test下创建了一张student新表,关于koa2的项目搭建先简单介绍到这里吧,算是对所有知识的一个小总结。

标签:实战,const,创建,ctx,js,student,Koa2,data,搭建
From: https://www.cnblogs.com/sexintercourse/p/16879002.html

相关文章

  • 30分钟上手 Koa2 + MySQL 开发
    30分钟上手Koa2+MySQL开发 转载https://blog.51cto.com/u_15478221/4925103趣谈前端2022-01-1410:00:53文章标签中间件数据库javapython编程语言文章分类其它......
  • 工具篇 之 Android WIFI ADB 实战
    LZ-Says:累哇哇。。。前言enmmm,新工作,新起点,新开始。。。今天忘记拿usb线,想着怎么破?enmmm,想了想,突然想到有个WIFIADB,遂,开始一波实战~~~实践直接插件里搜索,AndroidWIFI......
  • JAVA线程池管理及分布式HADOOP调度框架搭建
    平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头。怎么做......
  • 周逸(第八单元)(实例+实战)
    实例01deffun_bmi(person,height,weight):'''功能:根据身高和体重计算BMI指数person:姓名height:身高,单位:米weight:体重,单位:千克'''......
  • 电影推荐系统项目实战:环境配置与搭建:Linux环境下 MongoDB的配置与安装 ----- centos7
    1.在主机中下载好Linux版本的MongoDB压缩包:连接如下:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.3.tgz 2.打开VM,启动虚拟机(这里是hadoop102)......
  • synvisio搭建
    安装nodejs首先要安装nodejs环境,建议安装我下面的16.12版本,安装最新的18.x版本后面会报错:cd/usr/localwgethttps://nodejs.org/download/release/v16.12.0/node-v16.1......
  • 强化学习代码实战-04时序差分算法(SARSA)
    importnumpyasnpimportrandom#获取一个格子的状态defget_state(row,col):ifrow!=3:return'ground'ifrow==3andcol==11:......
  • 蓝莲花xss平台搭建
    对于docker不是很熟悉,所以直接在本地搭建了这个xss平台环境:phpstudy在phpstudy的www目录下右键打开gitbash下载蓝莲花xss然后打开phpstudy打开浏览器访问http://12......
  • iOS开发_SDK的搭建
    1、预知先上图,一共创建三个工程:Lib工程(sdkSample-lib)、Framework工程(sdkSample-framework)和SDK的Deme工程(sdkSampleDemo),如下图所示:2、操作步骤2.1创建Lib......
  • PiL测试实战(上)| 模型生成代码的单元级PiL测试
    前言  对于嵌入式代码,为了测试软件能否在目标芯片上实现预期的功能,通常需要进行PiL测试(Processor-in-the-Loop-Testing)。目前市面上较为常见的嵌入式软件调试工具有P......