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获得下拉框值的代码
Aug 13 Javascript
datagrid框架的删除添加与修改
Apr 08 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
浅析JS操作DOM的一些常用方法
May 13 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
js 数据存储和DOM编程
Feb 09 Javascript
JS实现图片放大缩小的方法
Feb 15 Javascript
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
js+SVG实现动态时钟效果
Jul 14 Javascript
Vue-resource安装过程及使用方法解析
Jul 21 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
Aug 27 Javascript
vue等两个接口都返回结果再执行下一步的实例
Sep 08 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
程序员编程十条戒律
2009/07/09 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
ES6 十大特性简介
2020/12/09 Javascript
Python中max函数用法实例分析
2015/07/17 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
Python datetime模块的使用示例
2021/02/02 Python
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
九年级历史教学反思
2014/01/27 职场文书
电台实习生求职信
2014/02/25 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书