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 定位input元素的几种方法小结
Jul 28 Javascript
JavaScript将XML转成JSON的方法
Mar 12 Javascript
JavaScript控制网页层收起和展开效果的方法
Apr 15 Javascript
JavaScript中的Promise使用详解
Jun 24 Javascript
JavaScript脚本判断蜘蛛来源的方法
Sep 22 Javascript
基于Vuejs框架实现翻页组件
Jun 29 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
微信小程序 弹框和模态框实现代码
Mar 10 Javascript
requirejs + vue 项目搭建详解
Jun 16 Javascript
在 React、Vue项目中使用SVG的方法
Feb 09 Javascript
JS数组方法join()用法实例分析
Jan 18 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
Feb 06 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+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
JavaScript 乱码问题
2009/08/06 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
详解JS面向对象编程
2016/01/24 Javascript
用file标签实现多图文件上传预览
2017/02/14 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
Python中的localtime()方法使用详解
2015/05/22 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
军训生自我鉴定范文
2013/12/27 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
内科护士节演讲稿
2014/09/11 职场文书
秦兵马俑导游词
2015/02/02 职场文书
在职证明书模板
2015/06/15 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python
python基于turtle绘制几何图形
2021/06/15 Python