相对路径和绝对路径是用于引用文件,在实际使用中,有些时候适合用相对路径,有些时候适合用绝对路径。
OnceAir顽石云盘在使用时可以改变一些默认的设置,实现新的功能,比如本文就将云盘变为了相册服务器,便于更好的浏览图片。
HTTP 是一种无状态的协议,服务器单从网络连接上无从知道客户身份,这给交互式 Web 应用程序的实现带来了阻碍。Session 和 Cookie 一样,也是用来绕开 HTTP 的无状态性的手段之一,但与 Cookie 在客户端保存状态信息不同,Session 将用户的状态信息保存在服务器端。
当应用程序需要为某个客户端的请求创建一个 Session 的时候,服务器会首先检查这个客户端的请求里是否已包含了一个 Session 标识,即 SessionID。如果已包含一个 SessionID,则说明服务器为此客户端创建过 Session,服务器就会把这个 SessionID 对应的 Session 检索出来使用(如果检索不到,可能会新建一个);如果客户端请求不包含 SessionID,服务器就会为此客户端创建一个新的 Session 并且生成一个与此 Session 相关联的 SessionID。SessionID 的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串。这个 SessionID 将在本次响应中被返回给客户端保存(常放在 Cookie 中返回,客户端 Cookie 禁用时也可放在 URL 中)。
OnceIO 是一个自身功能极简,完全由路由、中间件和Handler构成的 web 开发框架:一个 OnceIO 应用本质上就是在调用各种中间件和Handler。
中间件是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)),并将应用的请求-响应循环传向下一个中间件。
一个应用的请求-响应循环如下图所示,由请求对象、响应对象、中间件和 handler 构成。
OnceDoc是一个高性能的、高度独立的企业内容(网盘)管理系统,底层技术完全自主实现。你仅需预先安装好NodeJS的运行环境,无需配置例如IIS、Tomcat、MySQL/SQLServer、环境变量之类的复杂依赖,解压即用。不需要您具备任何IT知识,,30秒即可完成安装,打造专属于您自己的网盘和在线文档编辑工具。
Web 资源在服务器和客户端(浏览器)之间的副本不仅能保存在客户端,也可以保存在服务器端。缓存会根据进来的请求将输出内容的副本保存在服务器内存中;然后,如果下一个请求是相同的 URL,且网页在这段时间内没有更新,服务器就不会再次从硬盘中获取内容,而是直接使用内存中缓存的网页副本,达到节约带宽,减少延迟的作用。
下面我们将介绍一些 OnceIO 中和服务器端缓存有关的函数和属性。
before函数提供了一种机制,可以在文件接收之前根据req.headers对文件进行验证(如大小、类型),return true 表示验证通并开始接收文件。在这里 before 中的回调函数会根据 req.headers 中的 content-length 判断上传的文件是否超出了尺寸限制(开发人员可以通过修改 if 语句中的常数改变文件上传尺寸上限,content-length 单位为 byte,1024 * 1024 即代表 1 MB),如果超出了,文件不会被上传,服务器返回错误信息;如果没有超出,函数返回值为 true,服务器继续执行 app.file 中的回调函数,将文件从临时地址转移到指定存储地址,文件上传到这里就完成了。
为了提供静态资源,比如图像、CSS 文件和 JavaScript 文件等,可以将这些资源放在专门的文件夹中,然后用 app.static('folder') 将文件夹设置为 static 模式,使其中的资源可以直接被提供,而不参与中间件、Handler、会话、POST 和 Cookie,以达到节约带宽、减少延迟和降低服务器压力的目的。示例代码如下:
app.static('css')
由于 doT.js 模板引擎的整体性能较优,OnceIO 采用 doT.js 作为默认模板引擎。在使用任何一种除了 doT.js 之外的模板引擎之前都需要先用 cmd 在项目文件夹安装这种模板引擎。以使用 Git Bash 安装 EJS 为例,使用的命令是:
$ npm install ejs