Koa项目搭建过程详细记录


Posted in Javascript onApril 12, 2018

本文介绍了Koa项目搭建过程详细记录,分享给大家,具体如下:

Koa项目搭建过程详细记录

Java中的Spring MVC加MyBatis基本上已成为Java Web的标配。Node JS上对应的有Koa、Express、Mongoose、Sequelize等。Koa一定程度上可以说是Express的升级版。许多Node JS项目已开始使用非关系型数据库(MongoDB)。Sequelize对非关系型数据库(MSSQL、MYSQL、SQLLite)做了支持。

Koa项目构建

cnpm install -g koa-generator

// 这里一定要用koa2
koa2 /foo

Koa常用中间件介绍

koa-generator生成的应用已经包含常用中间件了,这里仅说它里面没有用到的。

koa-less

app.use(require('koa-less')(__dirname + '/public'))

必须在static前use,不然会无效。

stylesheets文件夹下新建styles.less,并引入所有模块化less文件。

@import 'foo.less';
@import 'bar.less';

这样所有的样式会被编译成一个style.css。在模板(pug)中引用style.css就行了。

koa-session

// 设置app keys,session会根据这个进行加密
app.keys = ['some secret hurr'];
// 配置session config
const CONFIG = {
  key: 'bougie:session',
  /** (string) cookie key (default is koa:sess) */
  maxAge: 1000 * 60 * 60 * 24 * 7,
  overwrite: true,
  /** (boolean) can overwrite or not (default true) */
  httpOnly: true,
  /** (boolean) httpOnly or not (default true) */
  signed: true,
  /** (boolean) signed or not (default true) */
  rolling: true,
  /** (boolean) Force a session identifier cookie to be set on every response. The expiration is reset to the original maxAge, resetting the expiration countdown. (default is false) */
  renew: false,
  /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/
};

// 应用中间件
app.use(session(CONFIG, app));

这个必须在router前use,不然会无效。

基本使用,可以当成一个普通对象

// 赋值
ctx.session.statu = value
// 取值
ctx.session.statu
// 删除
ctx.session.statu = null

koa-proxies

用于代理配置

const proxy = require('koa-proxies')
app.use(proxy('/octocat', {
  target: 'https://api.github.com/users',  
  changeOrigin: true,
  agent: new httpsProxyAgent('http://1.2.3.4:88'),
  rewrite: path => path.replace(/^\/octocat(\/|\/\w+)?$/, '/vagusx'),
  logs: true
}))

路由控制

开发主要集中在路由控制这里,包括restful接口和模板渲染

获取参数(request)

查询参数(?param=a)

ctx.query.param

路由参数(/:id)

ctx.params.id

POST参数(JSON或Form)

ctx.request.body

请求回应(response)

服务器响应给客户端的数据

restful

ctx.body = yourData

模板渲染

默认从views目录开始,不许加文件后缀

ctx.render('layout', yourData)

路由拦截

未登录时拒绝请求,这样会返回404

const userAuth = (ctx, next) => {
  let isLogin = ctx.session.isLogin
  if(isLogin) return next()
}
router.use('/', userAuth)

此操作会包含在路由,如"/a"、"/b"等,需在子路由之前use,不然会无效

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
页面中body onload 和 window.onload 冲突的问题的解决
Jul 01 Javascript
得到jQuery detach()后节点中的某个值实现代码
Feb 05 Javascript
最短的IE判断var ie=!-[1,]分析
May 28 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
Jul 29 Javascript
详解JavaScript编程中的数组结构
Oct 24 Javascript
轻松搞定js表单验证
Oct 13 Javascript
jquery+css3问卷答题卡翻页动画效果示例
Oct 26 Javascript
js原生日历的实例(推荐)
Oct 31 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 Javascript
浅谈js获取ModelAndView值的问题
Mar 28 Javascript
浅谈Vue SSR中的Bundle的具有使用
Nov 21 Javascript
微信小程序input抖动问题的修复方法
Mar 03 Javascript
React props和state属性的具体使用方法
Apr 12 #Javascript
react-native 圆弧拖动进度条实现的示例代码
Apr 12 #Javascript
关于vue中 $emit的用法详解
Apr 12 #Javascript
Vue 页面跳转不用router-link的实现代码
Apr 12 #Javascript
JS中promise化微信小程序api
Apr 12 #Javascript
vue配置请求本地json数据的方法
Apr 11 #Javascript
jQuery实现判断上传图片类型和大小的方法示例
Apr 11 #jQuery
You might like
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
JSON生成Form表单的方法示例
2018/11/21 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
[01:54]胎教DOTA2 准妈妈玩家现身中国区预选赛
2016/06/26 DOTA
Python中线程编程之threading模块的使用详解
2015/06/23 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
语文复习计划
2015/01/19 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
共青团员自我评价
2015/03/10 职场文书
立春观后感
2015/06/18 职场文书
父亲节感言
2015/08/03 职场文书
关于保护环境的建议书
2019/06/24 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
Python中request的基本使用解决乱码问题
2022/04/12 Python