koa

「异」曲同工 —— Generator

孤街醉人 提交于 2020-03-21 04:10:26
3 月,跳不动了?>>> 介绍 大家都知道,JS是一门单线程语言,所谓"单线程"就是一次只能完成一件任务。若是多个任务,就要排队执行,前面一个任务完成,后面一个任务再去执行。如果加入某个任务耗时过长,那么后面的任务就要一直等待下去,这样就会拖慢了整个程序,例如:一段死循环代码,就会使得进程卡在这。这就是同步的缺点。而解决这类问题就需要另一种任务处理方式: "异步",这种模式可以参考 ajax 、setTimeout 这类方法,调用方法后不会等到它执行完成,而是直接执行后续代码。 ajax 方法执行完成后通过状态通知主线程,或者通过回调处理 ajax 的执行结果。 背景 现在前端与后台通信,一般都是采用的异步请求的方式,这样接口互不干扰,页面各部分渲染自己的数据,就好比我们定时蒸米饭,蒸饭过程中去炒菜了,焖饭在进行,时间到了后,我们收到通知饭闷好了。目前前端主要使用 ES6 的 promise , ES7 中的 async await 去实现异步方法。 对于异步编程的核心思想,我们先了解下他的运行机制: 程序中所有同步任务都会在主线程上执行,形成一个执行栈。 在主线程之外存在一个"任务队列"。当我们的异步任务有了结果,他就会往"任务队列"中放一个事件。 当"执行栈"中的所有同步任务执行完成后,他会自动去读取"任务队列"中的事件,里面的这些事件都是等待状态的。取出对应的异步事件

Koa 框架整理

半世苍凉 提交于 2020-03-17 08:28:02
学习交流 Koa使用了ES6规范的generator和异步编程是一个更轻量级Web开发的框架,Koa 的先天优势在于 generator。由于是我个人的分享交流,所以Node基础、ES6标准、Web开发基础以及Koa的"Hello World"程序都不在讨论,希望各位小伙伴提出意见和指导。   PS:Koa 内核中没有捆绑任何中间件,但不用担心,Koa 拥有极其强悍的拓展性,正文所有中间件都可以在npm官网下载安装,但国内域名安装会有一些限制,提供一个国内镜像安装方法,速度非常快,在直接npm模块失败的时候非常好用,使用npm --registry=http://registry.npmjs.org install XXXXX –XX 命令安装,只需要在install后面加上要安装的中间件名称和相应的参数即可。 一键生成koa/koa2项目: 1、 npm install -g koa-generator 2、新建项目目录 koa mytest (koa1项目) koa2 koa2test (koa2项目) 3、进入目录 cd koa2test 4、安装依赖 npm install 5、运行 npm start 一、使用Koa搭建Web项目流程 1、Koa项目创建   个人认为不管任何框架,Web项目搭建必需的几个方面,页面、中间件、路由、会话和存储、日志、静态文件指定

网站信息泄漏攻击——越权操作、目录遍历、源码暴露

大兔子大兔子 提交于 2020-03-15 22:52:51
服务器除了以上提到的那些大名鼎鼎的漏洞和臭名昭著的攻击以外,其实还有很多其他的漏洞,往往也很容易被忽视,在这个小节也稍微介绍几种。 越权操作漏洞 如果你的系统是有登录控制的,那就要格外小心了,因为很有可能你的系统越权操作漏洞,越权操作漏洞可以简单的总结为 「A 用户能看到或者操作 B 用户的隐私内容」,如果你的系统中还有权限控制就更加需要小心了。所以每一个请求都需要做 userid 的判断 以下是一段有漏洞的后端示意代码: 1234567 // ctx 为请求的 context 上下文let msgId = ctx.params.msgId;mysql.query( 'SELECT * FROM msg_table WHERE msg_id = ?', [msgId]); 以上代码是任何人都可以查询到任何用户的消息,只要有 msg_id 就可以,这就是比较典型的越权漏洞,需要如下这么改进一下: 12345678 // ctx 为请求的 context 上下文let msgId = ctx.params.msgId;let userId = ctx.session.userId; // 从会话中取出当前登陆的 userIdmysql.query( 'SELECT * FROM msg_table WHERE msg_id = ? AND user_id = ?', [msgId,

基于koajs的web项目构建-入门篇

房东的猫 提交于 2020-03-05 20:13:56
对 koajs 的学习已经持续一段时间,对于"用"这一层面基本掌握。学习之后,总是希望能实际的应用到项目之中。贸然给现有项目大换血是不现实的,姑且先拟一个小项目付诸实践。 在尝试使用 koajs 时,我依旧采用严格的 MVC 模式。M 做为数据模型层,主要负责业务数据的管理和操作,来源于数据库操作或者api调用。V 做为视图层,主要负责站点前台的展示。C 做为业务控制层,主要负责对站点业务流程的处理。基于这样的思路,首先建立起项目的基本目录结构: + configs(项目配置文件目录) ++ build(项目编译相关配置) * + controllers(项目业务控制代码目录) + kits(常用工具包) + middlewares(项目中间件) + models(业务数据对象,可以是操作数据库,可以是来源于调用api) + public(静态资源目录) ++ src(项目静态资源源文件) ++ publish(项目静态资源发布文件,发布自动生成) + routers(路由配置文件目录) + test(项目相关测试文件) + views(项目视图目录) ++ dev(开发视图文件) ++ pro(发布视图文件,发布自动生成) + app.js(项目入口) 注:项目目录是让写程序和看程序的人能一眼了解项目结构,我且主观的认为这样的结构是能让看到的人一目了然

基于koajs的web项目构建-心得篇

有些话、适合烂在心里 提交于 2020-03-05 20:11:37
根据 基于koajs的web项目构建-入门篇 所描述的,建立了项目的基本目录结构,接下来的工作便是编码,编译,测试,发布。做为这些工作,每一项工作都有自己的学问,针对这三项工作的技巧分析文章在网上有很多,所以我并不认为有人能够以简单的描述就涵盖。对于自己,仅作文去尝试清楚的阐述自己构建 node 项目的一些实践。 闲谈 养成良好编码习惯。前端项目中,js 和 html 的语法都是很松散的,变量使用大写或者小写,语句末尾是否有 ; ,大多数情况都是可以适应的。这样的设计无疑提供了更好的容错能力,却助纣了很多开发者随意的编码习惯。随意的编码风格最终导致项目代码的可维护性低,新加入成员学习成本提高。为了克服这一问题,强制约束编码规范是第一层解决方案,我们可以参照 airbnb的编码规范 ,读一读 编写可维护的 javascript 。从自己做起,再到所再的团队,力求所有编码人员都是统一编码风格,让自己和阅读自己程序的人节省出更多的时间。 合理的使用开发工具。开发工具为前端开发提供了越来越多的便利,对于工具而言,无非是熟能生巧,所以对于一个开发人员慢慢积累自己掌握的开发工具是很重要的。能熟练的使用编辑器,提高自己的编码速度;定义好代码质量检测插件,能约束自己写出更规范的代码;合理使用一些自动化构建工具,能让自己避免很多重复性的工作。 在项目中积累。不断有项目从自己手中经过,项目过后

最全 Docker 介绍与教程,一文全掌握

自作多情 提交于 2020-03-05 18:27:15
2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业。 但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?本文就来详细解释,帮助大家理解它,还带有简单易懂的实例,教你如何将它用于日常开发。 一、环境配置的难题 软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来? 用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。 如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:"它在我的机器可以跑了"(It works on my machine),言下之意就是,其他机器很可能跑不了。 环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。 二、虚拟机 虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件

koa怎么启动服务?

萝らか妹 提交于 2020-03-02 14:50:25
环境安装 nodejs环境官网下载: http://nodejs.cn/download/ (个人安装的版本) node -v v8.11.4 npm -v 5.6.0 项目搭建 1、第一步:全局安装 koa-generator npm install koa-generator -g 2、第二步:使用 koa-generator 生成 koa 项目 # 项目名字为:myproject koa2 myproject 3、第三步:进入项目,安装依赖包 # 进入 myproject 项目 cd myproject # 安装 npm install 4、第四步:启动服务 npm start 5、第五步:打开浏览器 # 打开下面链接 http://localhost:3000/ # 页面显示 Hello Koa 2 ! Welcome to Hello Koa 2 ! 来源: CSDN 作者: 凯小默 链接: https://blog.csdn.net/kaimo313/article/details/104608885

koa-dir-router 一个可以让你随意更改接口代码不用重启的koa服务的中间件

强颜欢笑 提交于 2020-03-01 15:37:19
在使用koa做接口服务器时,每次更新接口代码都需要重新开启koa服务;是否想每次修改完代码,直接保存就能生效?网上大片大片的这个热更新机制,那个使用pm2等去监听文件修改来重启服务;若是在线上服务器若真的服务器重启或导致段时间内的服务异常;针对这个问题 koa-dir-router 中间件可以良好的去处理接口更新的情况。 koa-dir-router 点击传送 koa-dir-router 方便的访问 koa-dir-router 中间件使用原理是根据访问的路径去匹配当前目录下的js文件,就好像是php代码似的根据文件路径去访问php代码,修改代码能及时生效 koa-dir-router 跑起来很简单; 简单几行代码就可以; // ./index.js const dirRouter = require ( 'koa-dir-router' ) const Koa = require ( 'koa' ) const path = require ( 'path' ) var app = new Koa ( ) app . use ( dirRouter ( { dir : path . join ( __dirname , './controller' ) // Incoming directory structure to access } ) ) app . listen (

koa源码中的promise的解析

心不动则不痛 提交于 2020-02-29 09:26:16
koa 是一个非常轻量优雅的 node 应用开发框架,趁着闲余时间阅读了下源代码,其中一些比较有意思的地方整理成文与大家分享一下。 洋葱型中间件机制的实现原理 我们经常把 koa 中间件的执行机制类比于剥洋葱,这样设计其执行顺序的好处是我们不再需要手动去管理 request 和 response 的业务执行流程,且一个中间件对于 request 和 response 的不同逻辑能够放在同一个函数中,可以帮助我们极大的简化代码。在了解其实现原理之前,先来介绍一下 koa 的整体代码结构: lib |-- application.js |-- context.js |-- request.js |-- response.js application 是整个应用的入口,提供 koa constructor 以及实例方法属性的定义。context 封装了koa ctx 对象的原型对象,同时提供了对 response 和 request 对象下许多属性方法的代理访问,request.js 和 response.js 分别定义了ctx request 和 response 属性的原型对象。 接下来让我们来看 application.js中的一段代码: listen(...args) { debug('listen'); const server = http.createServer(this

学习Web开发,就业方向你知道几个 ?

蓝咒 提交于 2020-02-27 07:21:54
结合Web开发发展现状,WEB前端开发工程师已成为当下炙手可热的岗位之一,大中型企业对前端开发人才的需求量与日俱增,开始学习Web开发技术的学生也开始明显增多。从WEB业务开发层面出发,将WEB前端与后端融合总结,Web开发就业方向你知道几个 1。WEB开发,前端、后端是web开发的两个端,其实统称web开发,在很多国外公司没前后端这个说法,都叫做『软件工程师』或者web developer。其实,要转换一个思想:前后端并不是对立的,所以在你保持前端高水平的情况下,精进一些后端技术是必要的,但是要分清主次,前端为主。 2。数据方向,web开发分web前端和web后端,是以web服务的角度来看待的,数据研发这个是在web开发的基础上用数据附能,懂可视化的一定是有前端能力的,懂hadoop的一定JavaScript玩的溜,属于web开发的拓展方向。 3。Web架构师能得到更多的薪资。由于拥有最为广泛的WEB相关知识沉淀,更加容易成为一名架构师。这个职业发展方向不如第一种来得平滑,主要是作为一名架构师不得不学习:后端技术、DBA、Platform等内容,而这种学习通常需要实际操刀做项目,但只要你坚持,未来前途无限光明。 4。大前端方向,由于一定程度上,前端把ios和安卓收编了,统称大前端(还有node)。而对大前端模式来说,这句话最有趣的地方在于:“大”才是核心,“前端