博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
connect & express简介
阅读量:6091 次
发布时间:2019-06-20

本文共 2553 字,大约阅读时间需要 8 分钟。

    • Node.js[3] 俯瞰API (整理中)

前面几篇反复提到“高质量模块”;connect和express无论从代码的结构、可读性以及UT、文档等各个方面,都是node模块开发的榜样。这篇文章基本是这份slide展开讨论的缩减版,其中的源码分析留在后续的《connect源码分析》、《express源码分析》中展开。

对connect和express的兴趣来自于前不久组里的一个项目,当时遇到这些需求/纠结:

  • 项目需要web server
  • tomcat/apache太大,以至于无法短时间内摸清他们的实现细节
  • 刚好想了解web server实现细节
  • 一直觉得connect 中间件(middleware)这个名词比较神秘大笑
  • 想了解node模块开发、发布细节(这是中途产生的想法)

TJ 和他的 connect、express

和出自同一作者(之后简称TJ)。从依赖性看,express基于connect;但从2个项目的git提交历史来看,实际上先有express项目(2009-6-27),2010-5-27 前后connect从express项目分化出来(express 0.12.0)。express 0.12.0这个版本实际上已经有了中间件(middleware)雏形,只不过当时还叫plugin,那时已经有了logger,static,session等中间件。

《》中已经提到过TJ同学,这位node先锋长久以来(至少半年)占据着 “最高产作者”的榜单冠军太棒了;“最多依赖模块”前十位有2个来自TJ(正是connect和express) ;“最受欢迎模块”前十位竟然有4个来自TJ。

Connect

Connect is a middleware framework for node.

是一个node中间件(middleware)框架。如果把一个http处理过程比作是污水处理,中间件就像是一层层的过滤网。每个中间件在http处理过程中通过改写request或(和)response的数据、状态,实现了特定的功能。这些功能非常广泛,下图列出了connect所有内置中间件和部分第三方中间件。 这里能看到。

下图根据中间件在整个http处理流程的位置,将中间件大致分为

  1. Pre-Request 通常用来改写request的原始数据
  2. Request/Response 大部分中间件都在这里,功能各异
  3. Post-Response 全局异常处理,改写response数据等

 

为何要有connect?

下面的代码展示了使用connect和node原生api写一个静态文件服务器:

/*
* 使用connect实现的静态文件处理
*/
var connect = require('connect');
connect(connect.static(__dirname + '/public')).listen(//监听
3000,
function() {
console.log('Connect started on port 3000');
}
);
 
 
/*
* 使用node原生api实现
*/
var http = require('http');
http.createServer(
function(req, res) {
var url = require('url');
var fs = require('fs');
var pathname = __dirname + '/public' + url.parse(req.url).pathname;
 
//读取本地文件
fs.readFile(
pathname,
function(err, data) {
//异常处理
if (err) {
res.writeHead(500);
res.end('500');
}
else {
res.end(data);
}
}
);
}
).listen(//监听
3001,
function() {
console.log('http.Server started on port 3001');
}
);

尽管node原生api已经花费这么些行代码,但其实仍然留下一个简单静态文件服务器的诸多方面未经处理,比如:404等异常未处理、没有基本的文件路径安全验证(实际上我们可以访问到整个os文件系统)、全局异常处理等等;与此同时connect已经将这些问题都处理好了。

上面的例子是connect最初带给我的兴奋:写得更少做得更多(呵呵,窜了,deli文具?jquery?)。connect真正难能可贵的还是其良好的架构、便捷高效的扩展性,更多的细节留在后续源码分析。

这里再给出一些connect demo,有兴趣的同学请继续:

  • connect项目的
  • 笔者之前写的(解压后先运行npm install, demo在/connect中)

Express

Express: web application framework for node

Express是以web应用框架的面貌出现的,基于connect;准确说是在connect基础上添加一个更接近业务开发的框架。下图是express架构的简要分解:

express提供的框架比较灵活,你可以在express基础上实现MVC,也可以实现更多你希望的开发模式。express源码下的给出了express的各种用法,其中就有MVC。

从图中可以看到,express也实现了一些特殊的connect中间件

  • route middleware,实现路由
  • express.middleware,初始化express全局参数
  • mounted child app middleware,挂载子app

更多细节留在源码分析中详述。

最简单的express demo代码和connect太过相似,这里给出一些较复杂的express demo:

  • express项目的
  • 笔者之前写的(解压后先运行npm install, demo在/express中)

转载于:https://www.cnblogs.com/chris-oil/p/5625449.html

你可能感兴趣的文章
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>
Qt多线程
查看>>
我的友情链接
查看>>
想说一点东西。。。。
查看>>
css知多少(8)——float上篇
查看>>
NLB网路负载均衡管理器详解
查看>>
水平添加滚动条
查看>>
PHP中”单例模式“实例讲解
查看>>
VM EBS R12迁移,启动APTier . AutoConfig错误
查看>>
atitit.细节决定成败的适合情形与缺点
查看>>