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 相关文章推荐
JQuery Ajax 跨域访问的解决方案
Mar 12 Javascript
ext jquery 简单比较
Apr 07 Javascript
JavaScript 的继承
Oct 01 Javascript
JS多物体 任意值 链式 缓冲运动
Aug 10 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
Dec 05 Javascript
jquery+php实现滚动的数字特效
Nov 29 Javascript
jqueryMobile使用示例分享
Jan 12 Javascript
Vue resource中的GET与POST请求的实例代码
Jul 21 Javascript
js 计算月/周的第一天和最后一天代码
Feb 01 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
Jul 23 Javascript
vue实现移动端返回顶部
Oct 12 Javascript
如何基于viewport vm适配移动端页面
Nov 13 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伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
PHP目录操作实例总结
2016/09/27 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
总结Python中逻辑运算符的使用
2015/05/13 Python
Apache如何部署django项目
2017/05/21 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
pandas 选择某几列的方法
2018/07/03 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
python线程中的同步问题及解决方法
2019/08/29 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
JDO的含义
2012/11/17 面试题
外语系大学生自荐信范文
2014/03/01 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
公司节能减排方案
2014/05/16 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
python实现简易自习室座位预约系统
2021/06/30 Python
HTML中的表单元素介绍
2022/02/28 HTML / CSS
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android