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

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

搭建环境

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

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

npm install koa --save

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

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

4.启动项目服务

npm start 

访问 http://localhost:3000/

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

搭建项目

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

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

cnpm install sequelize --save

2.安装mysql、mysql2

项目使用的是mysql的数据库

cnpm install mysql mysql2 --save

3.配置Sequelize的数据库链接

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

/config/db.js

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

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文件,为学生信息表,该文件为文章的实例。

// 引入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,代码如下:

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,代码如下:

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添加如下内容

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

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

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

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

cnpm install koa-cors --save

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

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

然后重新启动服务。

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

接口返回成功

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

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

基于Koa2框架的项目搭建及实战开发的更多相关文章

  1. vue2.0版cnode社区项目搭建及实战开发

    _________________________________________________________________________ 初涉vue就深深的被vue强大的功能,快速的开发能力 ...

  2. 从零搭建基于webpack的Electron-Vue3项目(1)——基于webpack的Vue3项目搭建

    从零搭建基于webpack的Electron-Vue3项目(1)--基于webpack的Vue3项目搭建 前言 本篇文章内容,主要是基于webpack的Vue3项目开发环境进行搭建,暂时还不涉及到El ...

  3. 基于Flask框架的Python web程序的开发实战 <一> 环境搭建

    最近在看<Flask Web开发基于Python的Web应用开发实战>Miguel Grinberg著.安道译 这本书,一步步跟着学习Flask框架的应用,这里做一下笔记 电脑只安装一个P ...

  4. 基于Flask框架的Python web程序的开发实战 <二> 项目组织结构

    看到第七章-大型程序的结构,备受打击,搞不清工厂函数.蓝本.单元测试,不理解这些对象/变量怎么传递的,感觉好乱,虽然按照源码都照抄了,还是不理解.... 缓缓先.... 本来网上的Flask的教程就比 ...

  5. 关于springMVC3.0基于注解方式的项目搭建

    前言:开发了几个月的AS3项目,感觉JAVA都用不太熟练了.刚好这几个抽的空,就把自己以前用过的Spring框架再搭一边, 并完整的记录下来 开发环境:tomcat + mysql+ java 1.所 ...

  6. 基于DDD的.NET项目搭建

    第一次写博客有点小激动,废话不多说先上图: 01_Client:存放UI相关的项目,比如ASP.NET MVC或者相关的Web Model及View Model项目. 02_Hosting:存放与Se ...

  7. 基于webpack的React项目搭建(三)

    前言 搭建好前文的开发环境,已经可以进行开发.然而实际的项目中,不同环境有着不同的构建需求.这里就将开发环境和生产环境的配置单独提取出来,并做一些简单的优化. 分离不同环境公有配置 不同环境虽然有不同 ...

  8. 基于webpack的React项目搭建(二)

    前言 前面我们已经搭建了基础环境,现在将开发环境更完善一些. devtool 在开发的过程,我们会经常调试,so,为了方便我们在chrome中调试源代码,需要更改webpack.config.js,然 ...

  9. 基于webpack的React项目搭建(一)

    前言 工欲善其事,必先利其器.为了更好的学习React,我们先简要的把开发环境搭建起来.本文主要介绍使用webpack搭建React项目,如果你对React或es6的基础语法还不了解,建议先去学习学习 ...

随机推荐

  1. Arduino IDE开发ESP8266-01S连接MQTT服务器 控制继电器点亮LED

    准备条件: 1.Arduino IDE 2.ESP-01S模块 2.MQTT服务器 3.手机热点或路由器热点 Wi-Fi芯片 默认订阅的主题是  "开关控制" 当你发送主题  &q ...

  2. java位运算符生产环境应用分析

    在实际应用场景中 特别是 1,2,4,8,16 这种2的整数次幂的数字,因为具有非常典型的特点 首先是 1.2.4 这几位数了,因为他们的特点就是二进制只有一个为 1 的位,其他位都是 0,并同其他数 ...

  3. Adnc简介

    Adnc是一个轻量级的.Net Core微服务(microservices)快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权,包含基础的后台管理功能,代码简洁.易上手.学习成本 ...

  4. [强制]IDE使用UTF-8和LF

    Java 程序开发常用的集成开发环境(IDE)有Eclipse和IntelliJ IDEA.Eclipse是免费开源的,很多早期程序员使用它的比较多.IntelliJ IDEA有社区版和企业版,社区版 ...

  5. 进制及其字符串之间互转——C#

    本文介绍进制数转进制数,及每个进制对应的字符串 一.首先进制数转进制数(int-->int) 1.二进制数与十进制数互转: (1)二进制数转十进制数:还没找到 (2)十进制数转二进制数:目前还没 ...

  6. 使用vs code搭建Q#开发环境 (Mac)

    Q# 是微软几年前发布的一门用于模拟量子编程的语言. 3年前我在当时风靡的博客网站 ITEYE 上发布过如何在windows上搭建其开发环境:Q#开发环境搭建.时过境迁,不但iteye不知何处去,连Q ...

  7. ssh升级以及ssh: symbol lookup error: ssh: undefined symbol: EVP_aes_128_ctr错误处理

    1.解压安装openssl包:(不能卸载openssl,否则会影响系统的ssl加密库文件,除非你可以做两个软连接libcryto和libssl) # tar -zxvf openssl-1.0.1.t ...

  8. Spark学习进度10-DS&DF基础操作

    有类型操作 flatMap 通过 flatMap 可以将一条数据转为一个数组, 后再展开这个数组放入 Dataset val ds1=Seq("hello spark"," ...

  9. 牛客剑指Offer-数字在升序数组中出现的次数

    题目 统计一个数字在升序数组中出现的次数. 示例1 输入 [1,2,3,3,3,3,4,5],3 返回值 4 题解 第一种最简单的方法是O(n)复杂度.遍历数组统计结果. public int Get ...

  10. 了解一下ajax

    AJAX:是一种无需重新加载页面的情况下能够更新部分(局部更新)网页的技术. 1. 概念:ASychronous JavaScript And XML 异步的JavaScript和XML 首先了解一下 ...