Node VS Express 开发

2019-02-13  本文已影响0人  super_wei

在前一篇的时候我们有讨论过用node开发来实现有好的前后交互,使用Node原生进行开发的话久而久之会受不了一个简单的功能却要写好几行的接口,对开发者来说并不友好,比如Node.js 的 HTTP 模块虽然强大,但是仍然缺少一些实用特性。Express的出现就是用来解决这些问题,让你能够更高效的开发web程序;

Node开发:    

        可以使用熟悉的JavaScript就可以利用Node搭建web程序,我们现在有一个需求,通过函数来监听其他设备发过来的请求,函数通过请求的内容进行处理最终返回相应的内容: 如果是请求主页函数就把html页面渲染出来,如果是请求接口函数就把你想要的JSON数据返回给你,

使用Node开发,在客户端发出一个请求到服务端返回数据具体流程如下:

对于web应用处理流程归纳为监听请求、解析请求、做出响应,Node也是遵循以上的流程;该函数包含两个参数:一个是网络请求 request 对象 ,另一个表示网络响应的 response 对象。原生的 Node.js 使用 request 处理函数应对所有请求并做出响应,注意“ 所有 ”这个词;

Express 对 Node 开发带来的优化:

对比上面那一张图,Express对于原生Node的优化在于把上面那张流程图最后一个流程拆分为一组中间件函数(middleware),相应的流程图如下:

所谓的“中间件”就是指图中圆形块;

等等,为什么这个图比上面那个图更难看懂?

虽然图会更加复杂,但是所做的事却更加便捷了:与之前一个大型的 request 请求处理函数不同,这里使用大量小型处理函数(中间件)。有些函数每次都会去执行,而有些函数只在特定情形下才会触发(例如,404 错误)。Express 有很多使用的工具能够对这些处理函数进行区分。而在Node原生方法里,每个请求都要经过处理函数里面;简单来说就是Express把Node原生的方法按照不同的功能拆分成多个不同的小函数,节省了每次都经过大函数而浪费的时间;

请求处理函数中有两个参数:request 和 response。Node 的 HTTP 可以对其做些基本处理,例如:获取浏览器的user-agent。Express 则更为强大,你可以获取到访问者 IP 地址,以及解析优化过的 URL 请求对象。response 对象也同样得到了增强。通过类似sendFile这样的函数将文件传输代码压缩至一行。这极大的简化了处理函数的功能实现。

Express的核心:

    我们上面大概归纳了Express主要是对原生Node方法的一个优化,优化是基于Express本身的两个核心点: 中间件 以及 路由

中间件:

我们不采用一个巨大的 request 请求处理函数,相反我们将一系列简单的处理函数组合起来。每一个小的处理函数对应一个小任务,而这些处理函数就被称为中间件。

中间件可以处理各种任务,从记录请求到发送静态文件到设置 HTTP 头部。例如,应用中使用的第一个中间件功能可能就是记录服务器中每个请求的logger-log。当日志记录完成后,它将继续执行调用链中的下一个中间件。而下一个中间件功能可能会去验证用户。如果权限不够,就会使用“未授权”进行提示。反之则继续执行下一个中间件。此时中间件功能可能会是渲染主页并结束响应。

在图中可以看出,记录日志的中间件位于第一个并且肯定会被执行。紧接着就是执行权限认证的中间件。如果用户权限满足的话就继续执行下一个中间件,否则就不再执行后续中间件。

中间件最大的特点就是其相对来说比较标准,这也意味着开发者可以通过为 Express 开发中间件来拓展其功能。同时,这也许意味着某些通用的中间件,很有可能已经有人开发过来,例如: LESS 和 SCSS 等静态文件的编译、权限控制、cookies 和 sessions 的解析。

路由:

与中间价类似,路由对请求处理函数进行了拆分。不同的是,路由根据请求的 URL 和 HTTP 方法来决定处理方式的。

例如,你的程序中有一个主页和一个留言板页面。当用户使用 GET 去请求主页时,Express 会返回对应的主页内容。对留言板的请求的处理也是如此。如果用户通过 POST 方法在留言板页面中进行了留言操作的话,路由需要做出对应处理并刷新页面。

类似于中间件,上述路由的处理也是通过处理函数进行定义的。而不同的行为会调用不同的处理函数,路由配置和其他主流框架的路由配置相似,可以匹配多种规则。

像其他的工具一样,Express 并不是遗世独立的。

它存活于 Node.js 的生态中,所有你能找到大量的第三发模块提升你的开发效率,例如数据库连接驱动。因为Express 可拓展性极强,所有整个生态中存在大量为 Express 开发的类库。


以上只是阐述Express的主要区别,更加详细的介绍和方法可以查看相关的文档:

Express官方文档

Express 实战

上一篇下一篇

猜你喜欢

热点阅读