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 相关文章推荐
FireFox中textNode分片的问题
Apr 10 Javascript
jquery的颜色选择插件实例代码
Oct 02 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
jQuery数据缓存用法分析
Feb 20 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
Mar 03 Javascript
基于jquery css3实现点击动画弹出表单源码特效
Aug 31 Javascript
微信小程序前端源码逻辑和工作流
Sep 25 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 Javascript
Three.js开发实现3D地图的实践过程总结
Nov 20 Javascript
使用zrender.js绘制体温单效果
Oct 31 Javascript
vue使用微信扫一扫功能的实现代码
Apr 11 Javascript
AJAX检测用户名是否存在的方法
Mar 24 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 file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
Js切换功能的简单方法
2010/11/23 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
python中列表元素连接方法join用法实例
2015/04/07 Python
简单了解什么是神经网络
2017/12/23 Python
Django实现单用户登录的方法示例
2019/03/28 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
final, finally, finalize的区别
2012/03/01 面试题
火车来了教学反思
2014/02/11 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
酒店采购员岗位职责
2014/03/14 职场文书
明星员工获奖感言
2014/08/14 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
2014年统战工作总结
2014/12/09 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
信用卡收入证明范本
2015/06/12 职场文书
运动会开幕式主持词
2015/07/01 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python