koa2,我从来没有接触过koa2。我只知道是express原班人马开发的。它在某些方面比表达更好。经历了从koa到koa2的升级。应该说是比较成熟了。按照目前的技术实现方案,大部分的web服务基本都是前后端分离的,所以koa2让web应用的开发和API的使用变得更加简单,更值得我们去学习。本文仅简单介绍一下如何搭建环境,让初次学习koa或web应用的同学能更快看到学习成果,增加学习的自信心。我们会补充其中涉及的很多知识点和技术点。这篇文章解释的太多了,本文的目的是普及知识。本文部分代码可能是从网上抄来的,但都是手工调试运行的,以保证代码的正常运行。想都没想就安装node吧。考虑一下,koa项目是基于node的,话不多说,先安装node。但这里有一个细节需要注意。Node最低要求7.6.0版本,主要是一些es6语法支持。brewinstallnode这里我在mac环境下安装了node。由于我习惯使用homebrew安装,如果不是mac环境的学生,也可以直接从官网下载安装包安装。这一步比较简单。一般直接看官网文档就可以搞定。node安装完成后,查看node的版本有两个目的,一是查看node是否安装成功,二是查看是否满足koa的版本要求。node-vnpm-vnpm集成到node中,只要node安装成功,npm也会安装成功。安装koa,我们学习和应用的是koa项目,所以我们先安装koa。npminstallkoa--save安装koa2工程生成器并创建工程npminstallkoa-generator-gkoa2bbs这里的koa-generator不是官方的工程生成器,而是狼叔-桑石龙贡献的财富,在此,我们感谢狼叔叔。koa2bbs,这行代码创建了一个基于koa2的项目,并生成了一个基本的项目架构。基本项目结构如下:安装依赖项目也创建了,但是只完成了一个基本的骨架,没有血肉。接下来,您需要安装项目的依赖项。cdbbsnpminstall这一步可能会花很长时间,这和网络环境有关。由于网络原因,部分依赖可能会安装失败。这时候我们可以通过修改npm镜像来减少由于网络环境导致无法安装依赖的问题。详情请参考淘宝NPM镜像。启动服务npmstartnpm可以启动服务,但不支持热更新。我们只是测试项目能否正常启动、执行、热更新。我们稍后再谈。服务正常启动后,在浏览器中输入:localhost:3000,如果页面显示“HelloKoa2”等内容,则表示项目构建成功。构建项目这里的构建项目并不是用koa2初始化一个项目,而是给koa2初始化的项目补充营养,让它变得丰满。安装sequelize,不用管sequelize是什么。以后会有专题。你只需要了解一点:Sequelize是一个基于promise的nodejsORM,目前支持Postgres、mysql、SQLite和MicrosoftSQLServer。具有强大的事务支持、关联关系、读取和复制等功能。npminstallsequelize--saveinstallmysql,mysql2项目需要mysql数据库支持用于创建mysql数据库连接。constSequelize=require('sequelize');constsequelize=newSequelize('dbname','dbusername','password',{host:'localhost',dialect:'mysql',operatorsAliases:false,dialectOptions:{//字符集charset:'utf8mb4',collat??e:'utf8mb4_unicode_ci',supportBigNumbers:true,bigNumberStrings:true},pool:{max:5,min:0,acquire:30000,idle:10000},timezone:'+08:00'//东部八分之一时区});module.exports={续集};这些代码可以直接使用,只需要将代码中实例化Sequelie对象语句中的dbname改成你的数据库名,dbusername改成你的数据库用户名,passoword改成你的数据库密码,这里数据库名和数据库用户名不能为空,密码可以为空,如果为空,则为空字符串。constsequelize=newSequelize('bbs','root','',{...创建schema,modules,controllersschema:数据表模型实例modules:实体模型controllers:在controllers的3个目录下创建article.js.schema数据表模型在schema目录下新建article.js文件,这个文件的主要作用是与数据表建立对应关系,也可以理解为码表的创建。首先分析一下表结构:字段描述需要填写id文章自增ID,主键没有,自动填写的title文章标题是作者,作者是内容,文章内容是分类,而文章分类就是分析表结构,主要是建表,表结构就是我们根据实体关系抽象出来的实体关系,根据这些关系建立表,表中存储实体关系。创建表有两种方法:一种是使用mysql数据库的命令行工具或者UI工具来创建表,另一种是使用我们前面介绍的Sequelize让程序创建表。使用mysql工具建表:DROPTABLEIFEXISTS`article`;CREATETABLE`article`(`id`int(11)NOTNULLAUTO_INCREMENT,`title`varchar(255)NOTNULL,`author`varchar(255)NOTNULL,`content`varchar(255)NOTNULL,`category`varchar(255)NOTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=7DEFAULTCHARSET=utf8;SETFOREIGN_KEY_CHECKS=1;这是使用sql语句建表的方式,我们再来看另一种用Sequelize建表的方式(Sequelize不仅可以建表,还可以管理数据库);我们刚才在schema目录下创建的article.js是用来创建数据表模型的。也可以理解为创建数据表,代码如下:constmoment=require("moment");module.exports=function(sequelize,DataTypes){returnsequelize.define('article',{id:{type:DataTypes.INTEGER,primaryKey:true,allowNull:true,autoIncrement:true},//文章标题title:{type:DataTypes.STRING,allowNull:false,field:'title'},//作者author:{type:DataTypes.STRING,allowNull:false,field:'author'},//content内容:{type:DataTypes.STRING,allowNull:false,field:'content'},//文章分类类别:{type:DataTypes.STRING,allowNull:false,field:'category'},//创建时间createdAt:{type:DataTypes.DATE},//更新时间updatedAt:{type:DataTypes.DATE}}},{/***如果为true,名称与模型相同,即user*如果是fasle,mysql创建的表名会是复数,即users*如果指定的表名本身是复数,则表格不会改变*/freezeTableName:true});}模型应用,在项目的modules目录下使用创建一个article.js文件作为文章表,它是一篇文章的实例//导入mysql配置文件constdb=require('../config/db');//导入sequelize对象constSequelize=db.sequelize;//导入数据表模型constArticle=Sequelize.import('../架构/文章');Article.sync({force:false});//自动创建表classArticleModel{/***创建文章模型*@paramdata*@returns{Promise<*>}*/staticasynccreateArticle(data){returnawaitArticle.create({title:data.title,//标题作者:data.author,//作者内容:data.content,//文章内容分类:data.category//文章分类});}/***查询文章详情*@paramid文章ID*@returns{Promise
