node的两大常见web服务器框架有express和koa,之前已经介绍过express了现在来介绍下koa吧~

koa也是express团队的出品,意在利用es7新出的async来告别“回调地狱”

下面来看看koa的大概用法:

const koa = require('koa')
//koa路由器,不同于express天生自带路由,koa需要引入路由中间件
const koaRouter = require('koa-router')
//koa的静态文件处理中间件
const static = require('koa-static')
//处理post过来文件的中间件
const body = require('koa-better-body');
//配合better-body使用
const convert = require('koa-convert');
// url解析
const url = require('url') //不同于express,koa需要new
const server = new koa()
//监听端口
server.listen(8080) //配置接受文件存储位置,扩展名是否加上
server.use(convert(body({
uploadDir: './upload',
keepExtensions: true
}))) //正常koa的使用方法use
server.use(async (ctx,next) => {
ctx.user_id = '123456789'
//跨域可能需要加上的2个http头
ctx.set('Access-Control-Allow-Origin','*')
ctx.set('Access-Control-Allow-Headers','*')
await next()
}) //路由需要new
const r1 = new koaRouter()
//嵌套路由
r1.use('/test', async ctx => {
//获取http头信息,例如x-token是自定义的http头
let token = ctx.headers['x-token']
})
r1.use('/api', require('./routers/api.routers'))
//返回给koa server的时候需要调用routes函数
server.use(r1.routes()) //koa静态文件中间件
server.use(static('./www'))
'./routers/api.routers.js'/:
const koaRouter = require('koa-router')
const db = require('../libs/mysql') const r1 = new koaRouter() //操作日志
r1.get('/collect/:type/:data', async ctx => {
// ctx.params获取url上的顶死的参数
let {type,data} = ctx.params
// ctx.query获取?后的参数
let {username, password} = ctx.query
await db.insert('collect_table', {
type, data
})
ctx.body = {OK: true}
}) //获取餐厅
r1.post('/restaurant/:page/:size', async ctx => {
//获取post body上的参数
console.log(this.request.body) // if buffer or text
console.log(this.request.files) // if multipart or urlencoded
console.log(this.request.fields) // if json
// -------------------------------------------------------------------------
let {page,size} = ctx.params
let data = await db.query(`
SELECT * FROM restaurant_table LIMIT ${page*size},${size}
`)
ctx.body = data
}) //嵌套路由需要返回routes()
module.exports = r1.routes()
'../libs/mysql.js'
const mysql = require('mysql')
const config = require('../config')
const assert = require('assert') const db = mysql.createPool({
host:config.DB_HOST,
port:config.DB_PORT,
database:config.DB_DATABASE,
user:config.DB_USER,
password:config.DB_PASS
}) function filter(val) {
return val.replace(/"/g,'\\"').replace(/'/g,'\\\'')
} db._query = db.query db.query = function(sql) {
return new Promise((resolve, reject) => {
db._query(sql, (err, data) => {
if(err) {
reject(err)
} else {
resolve(data)
}
})
})
} db.select = function(table, fields, data) {
let WHERE = ''
if(!data) {
WHERE = '1 = 1'
} else {
let arr = [];
for(let key in data){
arr.push(`${key}="${filter(data[key])}"`)
}
WHERE = arr.join(' AND ')
}
return db.query(`SELECT ${fields} FROM ${table} WHERE ${WHERE}`)
} db.insert = function(table, data) {
let keys = []
let vals = []
for(let key in data) {
keys.push(key)
vals.push('"'+filter(data[key].toString())+'"')
}
return db.query(`INSERT INTO ${table} (${keys.join(',')}) VALUES(${vals.join(',')})`)
} db.update = function(table, data, where) {
assert(where)
assert(typeof where == 'object') let arr = []
for(let i in data) {
arr.push(`${i}="${data[i]}"`)
} let whereArr = []
for(let i in where) {
whereArr.push(`${i}="${where[i]}"`)
} return db.query(`UPDATE ${table} SET ${arr.join(',')} WHERE ${whereArr.join(' AND ')}`)
} db.delete = function(table, data) {
assert(data)
assert(typeof data == 'object') let arr = []
for(let i in data) {
arr.push(`${i}="${data[i]}"`)
}
return db.query(`DELETE FROM ${table} WHERE ${arr.join(' AND ')}`)
} module.exports = db

显而易见,mysql封装好给koa用只不过是将原来回调的形式换成Promise的形式

node框架koa的更多相关文章

  1. Node.js Koa框架学习笔记

    Koa 基本介绍 Koa是Node.js中非常出名的一款WEB框架,其特点是短小精悍性能强. 它由Express原版人马打造,同时也是Egg框架的设计蓝图,可以说Koa框架的学习性价比是非常高的. 官 ...

  2. 从Nest到Nesk -- 模块化Node框架的实践

    文: 达孚(沪江Web前端架构师) 本文原创,转至沪江技术 首先上一下项目地址(:>): Nest:https://github.com/nestjs/nest Nesk:https://git ...

  3. 第四代Express框架koa简介

    目录 简介 koa和express koa使用介绍 中间件的级联关系 koa的构造函数 启动http server 自定义中间件 异常处理 简介 熟悉Spring MVC的朋友应该都清楚Spring ...

  4. Node.js+Koa开发微信公众号个人笔记(一)准备工作

    本人也是在学习过程中,所以文章只作为学习笔记,如果能帮到你,那就更好啦~当然也难免会有错误,请不吝指出~ 一.准备工作 1.本人学习教程:慕课网Scott老师的<Node.js七天搞定微信公众号 ...

  5. 新一代web框架Koa源码学习

    此文已由作者张佃鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Koa 就是一种简单好用的 Web 框架.它的特点是优雅.简洁.表达力强.自由度高.本身代码只有1000多行 ...

  6. node js koa js严格模式

      当前为配置 非原创 引用于“得金” ### nodejs项目配置终端命令 1. 检查本地 nodejs 版本`$node -v` 如果版本低就升级 2. 安装 n 升级命令 `$npm insta ...

  7. AdonisJs(Node框架)学习总结

    先列出作为前端开发人员必须知道的10个NodeJs框架  AdonisJs 一个服务端渲染的MVC框架,它是 Laravel (PHP框架)的一个 NodeJS 版本. 可以安装脚手架工具adonis ...

  8. node,koa 图片批量添加水印,可手动配置水印位置

    公司设计在处理京东上架商品图片的时候,需要给设计好的图片添加京东的“logo”,并且logo位置得根据图片来摆放,需要通过计算得出logo位置.那样太麻烦了,于是就用node,koa写了批量给图片添加 ...

  9. node框架那些事儿

    一.简单介绍 express:适合初学者,模版引擎,路由,中间件 koa2:核心中间件 eggjs:企业级应用框架 二.express 服务端框架,提供路由功能,异常处理.路由系统+中间件构成web开 ...

随机推荐

  1. 动态增加表单元素并获取元素的text和value提交

    以上是效果图 需求是这样的: 专家设置好条件,然后设备检测到达到相应的条件之后,设备发出提醒给用户. 这就需要专家设置好能看懂的条件之后,然后把给专家看的,正常人能看懂的条件和发送的设备的,设备能够识 ...

  2. 网页中输出HTML代码

    >>>>>> mustache.js的解决方案 var entityMap = { '&': '&', '<': '<', '>' ...

  3. tp框架的url模式

    tp框架url地址可以由以下四种 http://网址/index.php?m=XX&c=XX&a=XX   基本get模式 http://网址/index.php/模块/控制器/操作方 ...

  4. Clion下jni配置

    Clion非常适合写C++程序 首先把C:\Program Files\Java\jdk1.7.0_79\include和C:\Program Files\Java\jdk1.7.0_79\inclu ...

  5. Cesium剖面分析

  6. 如何使用svn命令行更新想要的目录?

    内容来自网络. 一 某些原因想在svn co的时候排除某些目录,可以绕个圈子,分三步来完成:co外层目录:svn checkout --depth empty URL[URL[LOCATION]完成之 ...

  7. JSON基础(Java)

    1.json maven 依赖(以下都以第一个包为例) <dependency> <groupId>org.json</groupId> <artifactI ...

  8. 初始化angularJS之ng-app的自动绑定和手动绑定

    在传统的angularJS应用中,都是通过ng-app把angular应用绑定到某个dom上,这样做会把js代码入侵到html上,angular提供了手动启动的API--angular.bootstr ...

  9. 研华ADAM 6000系列型号枚举值

    public enum Adam6000Type    {        Non = 0,        Adam6015 = 6015,        Adam6017 = 6017,        ...

  10. 网络通信 --> Linux 五种IO模型

    Linux 五种IO模型 聊聊Linux 五种IO模型