在OnceIO(Node.JS)中用Redis储存Session 单线程的 Node.js 为了充分利用 CPU 的多核特性,采用了 cluster 模块,利用主从模式,生成与 CPU 核心数量相当的子进程,主进程捕获请求随机分配给子进程处理,并负责子进程的崩溃重启。进程与进程之间是不能共享数据的,如果把 Session 存储在内存里,存储在不同进程的内存中的 Session 将无法共享,Session 认证机制会出现问题。例如,用户 A 认证的过程是由进程 1 处理的,那么维持会话的 Session 将保存在进程 1 的内存数据中;用户 A 接下来的请求被分配给进程 2 处理,因为进程 2 没有处理过用户 A 的认证,没有维持这个会话的 Session,所以进程 2 会判断用户 A 并没有授权。这样用户 A 需要多次重复认证访问才能继续下去。
OnceIO的模块拦截与注入:模板文件路由重定向与Model数据改写 OnceIO 的模块路由和模板注入机制是与其它Web框架最主要的区别之一。软件系统时常需要针对不同的客户定制不同的功能。OnceIO的模块路由可以通过一个扩展包,对系统原有模板(Template)和填充数据(Model)进行重定向或复写。可以在不更改系统源代码的情况下,以非侵入的方式对系统进行深度定制和扩展。
OnceIO模块开发:模块注册、模块路由、静态文件重定向以及如何开发与设计一个功能扩展模块 OnceIO是
OnceDoc企业网盘的底层Web框架。可以对Web应用进行分布式模块化存储,并基于模块路由对http请求进行重定向。这样模块的前端、后端和数据库定义就可以集中存储在一个扩展包里,每一个扩展包都是一个功能独立的应用,只需通过添加/删除文件夹的方式就可实现功能删减,从而实现功能模块的自由组装。正是因为OnceIO的这种模块化机制,才可以让OnceDoc有能力扩展成邮箱、流程管理、分享社区、资产管理、商城等系统。这篇文章主要介绍如何开发一个简单的OnceIO模块,以及资源文件的模块路由规则。
少年,不要滥用箭头函数啊:JS中lambda表达式的优缺点和使用场景 箭头函数的语法我就不讲了,相信大家都见识过。跟我一样,大家喜欢箭头函数90%的原因是它好看。除了好看,它是不是与function等价呢?肯定不等价,因为TC39不可能仅因为好看而引入一个语法糖(class除外)。
箭头函数的渊源可以追溯到上古时期一个叫lambda演算的东西。lambda演算是数学家提出来的,有些数学家跟我们程序员一样也很懒,数学定理那么多,今天要证三角定律,明天要证勾股定律,累不累!那能不能将所有的证明问题用一个统一的体系进行形式化描述,然后由机器来完成自动推导呢?lambda演算就是干这个的,图灵也搞了一套体系叫图灵机,两者是等价的。
NodeJS教程:基于OnceIO框架实现文件上传和验证 before是OnceIO与其它Web框架的主要区别之一。它可以在文件接收之前就对文件进行一些基本验证,如大小、类型等,以求获得最侍性能。return true 表示验证通并开始接收文件,否则就关闭连接,取消上传。在 before 中,req.session对象是不可用的,因为session可能存在文件或数据库redis中,取得session是一个异步过程需要时间。而before函数需要立刻对文件合法性做出判断。
OnceIO(Node.JS)服务器端Cookie设置、添加、删除、显示及其实现原理 HTTP 是一种无状态的协议,服务器单从网络连接上无从知道客户身份,这给交互式 Web 应用程序的实现带来了阻碍。Cookie 就是用来绕开 HTTP 的无状态性的手段之一。Cookie 实际上是一小段的文本信息。客户端(浏览器)向服务器发送请求,如果 服务器需要记录该用户状态,就会将 Cookie 放在响应头中向客户端浏览器发送。如果浏览器启用了 Cookie,就会把 Cookie 保存起来,并且在再次请求该网站时把请求的网址连同 Cookie 一同提交给服务器。服务器通过读取 Cookie 来辨认用户状态。服务器还可以根据需要修改 Cookie 的内容。
OnceIO(Node.JS)的网页(模板)的引用与嵌套 OnceIO 提供将一个网页文件嵌套在另一个网页文件中的机制。文件嵌套与模板引擎无关,语法固定为
<!--#include="path"-->
,其中 path 为文件相对路径,引号必须为双引号,中间不能有空格。
<html>
<body>
<!--#include="header.html"-->
<div>
Main content
</div>
<!--#include="footer.html"-->
</body>
</html>
OnceIO(NodeJS)中的服务器端缓存、模板预加载和静态资源文件的缓存和Gzip压缩机制 Web 资源在服务器和客户端(浏览器)之间的副本不仅能保存在客户端,也可以保存在服务器端。缓存会根据进来的请求将输出内容的副本保存在服务器内存中;然后,如果下一个请求是相同的 URL,且网页在这段时间内没有更新,服务器就不会再次从硬盘中获取内容,而是直接使用内存中缓存的网页副本,达到节约带宽,减少延迟的作用。
下面我们将介绍一些 OnceIO 中和服务器端缓存有关的函数和属性。
NodeJS中的客户端缓存、浏览器缓存、304缓存和OnceIO的缓存控制 这里讨论的缓存是指 web 缓存:一个 web 资源(如 html 页面、图片、文件等)在服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存请求输出的内容的副本;然后,如果下一个请求是相同的 URL,且网页在这段时间内没有更新,浏览器就不会再次下载网页,而是直接使用本地缓存的网页副本。
缓存的作用主要有:
所有的缓存都有一套规则来帮助它们决定什么情况下使用缓存中的副本,什么情况下向源服务器再次发送请求。这些规则有的在协议(如 HTTP 协议 1.0 和 1.1)中有定义,有的则是由缓存的管理员(如 DBA、浏览器的用户、代理服务器管理员或者应用开发者)设置。
OnceIO(Node.JS)的路由(Routing)、路由方法和路由变量 路由用于确定应用程序如何响应对特定端点的客户机请求,包含一个 URI(或路径)和一个特定的 HTTP 请求方法(GET、POST 等)。
每个路由可以具有一个或多个处理程序函数,这些函数在路由匹配时执行。
路由定义采用以下结构:
app.METHOD(PATH, HANDLER)