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. Vuex 教程案例:计数器以及列表展示

    本案例github:https://github.com/axel10/Vuex_demo-Counter-and-list 本篇教程将以计数器及列表展示两个例子来讲解Vuex的简单用法. 从安装到启 ...

  2. quartz.net 3.x 使用总结

    quartz文档:https://www.quartz-scheduler.net/documentation/index.html 这里用新建的控制台项目进行演示. 目标效果为每隔一秒在控制台上输出 ...

  3. Cannot find class: BaseResultMap

    版权声明:本文为博主原创文章,转载请注明出处. model对应的mapping中将resultType改成resultMap即可. 什么是相应的model的xml配置文件呢? 可以理解为: 一直都可以 ...

  4. MySQL Connector 卸载

    MySQL Connector 安装的时候有时候会遇到很多问题,有时候会卸载失败,导致无法重新安装.测试了网上各种办法,删文件,删注册表,重启,360强行删除都不是很有效.最后发现msizap比较有效 ...

  5. windows xp/7/8/8.1/10安全模式详解和系统修复讲解

    如果你的电脑因为各种原因(强关电脑等原因导致的电脑蓝屏,或者引导文件受损等)开不了机,进不了电脑桌面,那么就可以看看我这篇文章了. 先贴上百度百科,说得挺好的.最下面有我贴的图片操作过程详解. 百度百 ...

  6. CucumberJS 资源

    https://cucumber.io/docs/reference/javascript https://github.com/cucumber/cucumber-js

  7. 有关Redis的Add和Set方法的比较

    测试发现,如果key已经存在,则调用Redis.Add(key, value)则不能添加或修改此key的内容value: 这样的话,我们在添加一个key和value的时候,不得不判断一次Contain ...

  8. 笔记:MyBatis 日志显示-log4j2

    在ClassPath路径创建log4j2.xml配置文件,增加如下日志配置: <?xml version="1.0" encoding="UTF-8"?& ...

  9. poj1321 棋盘(dfs)

    #include<iostream> #include<cstring> using namespace std; ]={},sum=; ][]; void dfs(int a ...

  10. 在RE了16次之后,没想到还可以这样Runtime error

    这是POJ: RE的原因: 比如: int b=2147483647; for(int i=0;i<=b;++i){ .... } 应该懂了吧, 2147483647是int能表示的最大整数 解 ...