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阻止用户多次提交示例代码
Mar 26 Javascript
一段非常简单的js判断浏览器的内核
Aug 17 Javascript
后台获取ZTREE选中节点的方法
Feb 12 Javascript
jquery代码实现简单的随机图片瀑布流效果
Apr 20 Javascript
JS根据生日月份和日期计算星座的简单实现方法
Nov 24 Javascript
jQuery中图片展示插件highslide.js的简单dom
Apr 22 jQuery
修改node.js默认的npm安装目录实例
May 15 Javascript
vue2.0 下拉框默认标题设置方法
Aug 22 Javascript
微信小程序与公众号实现数据互通的方法
Jul 25 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
Mar 07 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
May 03 Javascript
JavaScript仿京东轮播图效果
Feb 25 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 set_time_limit(0)长连接的实现分析
2010/03/02 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
js简单实现删除记录时的提示效果
2013/12/05 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
PHP如何对用户密码进行加密
2014/07/31 面试题
追悼会子女答谢词
2014/01/28 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
初中思品教学反思
2016/02/20 职场文书
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL