node框架koa
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的更多相关文章
- Node.js Koa框架学习笔记
Koa 基本介绍 Koa是Node.js中非常出名的一款WEB框架,其特点是短小精悍性能强. 它由Express原版人马打造,同时也是Egg框架的设计蓝图,可以说Koa框架的学习性价比是非常高的. 官 ...
- 从Nest到Nesk -- 模块化Node框架的实践
文: 达孚(沪江Web前端架构师) 本文原创,转至沪江技术 首先上一下项目地址(:>): Nest:https://github.com/nestjs/nest Nesk:https://git ...
- 第四代Express框架koa简介
目录 简介 koa和express koa使用介绍 中间件的级联关系 koa的构造函数 启动http server 自定义中间件 异常处理 简介 熟悉Spring MVC的朋友应该都清楚Spring ...
- Node.js+Koa开发微信公众号个人笔记(一)准备工作
本人也是在学习过程中,所以文章只作为学习笔记,如果能帮到你,那就更好啦~当然也难免会有错误,请不吝指出~ 一.准备工作 1.本人学习教程:慕课网Scott老师的<Node.js七天搞定微信公众号 ...
- 新一代web框架Koa源码学习
此文已由作者张佃鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Koa 就是一种简单好用的 Web 框架.它的特点是优雅.简洁.表达力强.自由度高.本身代码只有1000多行 ...
- node js koa js严格模式
当前为配置 非原创 引用于“得金” ### nodejs项目配置终端命令 1. 检查本地 nodejs 版本`$node -v` 如果版本低就升级 2. 安装 n 升级命令 `$npm insta ...
- AdonisJs(Node框架)学习总结
先列出作为前端开发人员必须知道的10个NodeJs框架 AdonisJs 一个服务端渲染的MVC框架,它是 Laravel (PHP框架)的一个 NodeJS 版本. 可以安装脚手架工具adonis ...
- node,koa 图片批量添加水印,可手动配置水印位置
公司设计在处理京东上架商品图片的时候,需要给设计好的图片添加京东的“logo”,并且logo位置得根据图片来摆放,需要通过计算得出logo位置.那样太麻烦了,于是就用node,koa写了批量给图片添加 ...
- node框架那些事儿
一.简单介绍 express:适合初学者,模版引擎,路由,中间件 koa2:核心中间件 eggjs:企业级应用框架 二.express 服务端框架,提供路由功能,异常处理.路由系统+中间件构成web开 ...
随机推荐
- C++编程理论学习笔记
1.变量: 变量的值都存储在内存中.内存中每个单元都有一个唯一的编号,就是单元的地址,变量在运行时占据内存单元互不相同的地址,C++的目标代码靠地址来区别不同的变量. 2.表达式: 虽然内存是存储c+ ...
- scala(二) Future执行逻辑解读
在scala中是没有原生线程的,其底层使用的是java的Thread机制.但是在scala中对java Thread进行了封装,实现了更便于操作线程的Future. 官方文档: Futures pro ...
- [转]ICE介绍 (RFC 5245)
[转]ICE介绍 (RFC 5245) http://blog.csdn.net/dxpqxb/article/details/22040017 1关于ICE的10个事实 1 ICE使用STUN和TU ...
- 简单几步优化你的windows,加快开机速度(重装windows之后要做的几件事)
每个人都想要让自己的系统运行得快一些,开机快一些,我就来说说我自己的经验,我使用的系统是windows8.1,当然这有些方法也适用于其他的系统,我每次重装完系统之后第一件事就是下面几步,当然重装系统之 ...
- WordPress文章中插入qq表情
看见一些博客中使用了QQ表情,这个效果还是很不错的,可以让文章看起来更爽,那么这个是怎么实现的呢? 下面我就来说说方法. 工具:QQ表情包,下载地址:http://yunpan.cn/cLw6UhwB ...
- php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
if(isset($_POST['submit'])) 它的意思是不是判断是否配置了$_POST['submit'] 这个变量呢?如果有这个变量 在执行其它代码 应该这样用if(isset($_POS ...
- python笔记之异常
异常 內建异常在exceptions模块内,使用dir函数列出模块的内容. 自定义异常类:继承基类Exception. 异常可以使用raise语句引发,可以使用try ... except ... e ...
- Python3数据库模块(sqlite3,SQLite3)
一.sqlite命令 创建数据库:在控制台sqlite3 name .databases 查看数据库 .tables 查看表格名 databaseName .dump & ...
- Intel 移位指令的陷阱(转)
今天发现了一个Intel逻辑左移指令shl的一个bug. 逻辑左移的概念是对给定的目的操作数左移COUNT次,每次移位时最高位移入标志位CF中,最低位补零. 其中OPRD1为目的操作数, 可以是通 ...
- 【深度学习】用PaddlePaddle进行车牌识别(二)
上节我们讲了第一部分,如何用生成简易的车牌,这节课中我们会用PaddlePaddle来识别生成的车牌. 数据读取 在上一节生成车牌时,我们可以分别生成训练数据和测试数据,方法如下(完整代码在这里): ...