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 相关文章推荐
js中的window.open返回object的错误的解决方法
Aug 15 Javascript
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
Highcharts 非常实用的Javascript统计图demo示例
Jul 03 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
jQuery获得子元素个数的方法
Apr 14 Javascript
JavaScript去除数组里重复值的方法
Jul 13 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
Nov 04 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
Aug 24 Javascript
原生js封装添加class,删除class的实例
Nov 06 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
Nov 22 Javascript
vue使用v-for实现hover点击效果
Sep 29 Javascript
ES6中Set和Map用法实例详解
Mar 02 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
基于php无限分类的深入理解
2013/06/02 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
php按单词截取字符串的方法
2015/04/07 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
python+opencv实现阈值分割
2018/12/26 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
资料员的岗位职责
2013/11/20 职场文书
个人存款证明书
2014/10/18 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书