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开 ...
随机推荐
- 【BZOJ3529】【SDOI2014】数表
Time Limit: 1000 ms Memory Limit: 512 MB Description 有一张n×m的数表,其第i行第j列 (1≤i≤n,1≤j≤m)的数值为能同时整除i和j的所有自 ...
- OSI模型和TCP/IP协议族(二)
OSI模型中的各层 物理层 物理层(physical layer)协调通过物理媒体传送比特流时所需要的各种功能.物理层涉及到接口和传输媒体的机械和电器规约.它还定义了这些物理设备即接口为了实现传输必须 ...
- 基于规则评分的密码强度检测算法分析及实现(JavaScript)
简言 用正则表达式做用户密码强度的通过性判定,过于简单粗暴,不但用户体验差,而且用户帐号安全性也差.那么如何准确评价用户密码的强度,保护用户帐号安全呢?本文分析介绍了几种基于规则评分的密码强度检测算法 ...
- 软件测试第二周作业 WordCount
本人github地址: https://github.com/wenthehandsome23 psp阶段 预估耗时 (分钟) 实际耗时 (分钟) 计划 30 10 估计这个任务需要多少时间 20 ...
- 记录使用CI框架开发项目时遇到的问题
关于CI框架在视图文件中怎样引入静态资源文件(js,css,images)的问题: 第一步:在application/config/config.php文件中配置 $config['base_url ...
- redis's usage
author:headsen chen date:2017-12-07 16:33:40 notice:This article is created by headsen chen ,and n ...
- 使用python UIAutomation从QQ2017(v8.9)群界面获取所有群成员详细资料,
首先安装pip install uiautomation, 运行本文代码.或者下载https://github.com/yinkaisheng/Python-UIAutomation-for-Wind ...
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListene解决办法
照着以前写的项目搭一个框架,项目用到的是ssm,spring+spring mvc+mybatis,由Eclipse转战IDEA上,项目的文件夹有一些改变,在之前的小项目中喜欢把lib文件夹放在项目根 ...
- Docker 网络管理及容器跨主机通信
1.网络模式 docker支持四种网络模式,使用--net选项指定: host,--net=host,如果指定此模式,容器将不会获得一个独立的network namespace,而是和宿主机共用一个. ...
- 将 Shiro 作为应用的权限基础 一:shiro的整体架构
将 Shiro 作为应用的权限基础 一:shiro的整体架构 近来在做一个重量级的项目,其中权限.日志.报表.工作量由我负责,工作量还是蛮大的,不过想那么多干嘛,做就是了. 这段时间,接触的东西挺多, ...