connect & express简介

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

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

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

TJ 和他的 connect、express

connectexpress出自同一作者TJ Holowaychuk(之后简称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等中间件。

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

Connect

Connect is a middleware framework for node.

Connect是一个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项目的examples
  • 笔者之前写的demo(解压后先运行npm install, demo在/connect中)

Express

Express: web application framework for node

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

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

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

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

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

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

  • express项目的examples
  • 笔者之前写的demo(解压后先运行npm install, demo在/express中)
时间: 2024-07-30 01:43:57

connect & express简介的相关文章

IIS Express简介

当前程序员只能通过下面两种Web服务器之一来开发和测试ASP.NET网站程序: 1. Visual Studio自带的ASP.NET开发服务器(webdev.exe). 2. Windows自带的IIS Web服务器. 上面两个方案各有优缺点,而且很多ASP.NET程序员告诉我们:"我希望有一个像ASP.NET开发服务器那样容易使用,但是功能又跟IIS一样强大的服务器".今天我很高兴地宣布,我们将提供另一个新的.免费的.综合了前两个方案的优点的选择-IIS Express,它的出现使得

Express (Routing、Middleware、托管静态文件、view engine 等等)

1. Express 简介 Express 是基于 Node.js 平台,快速.开放.极简的 web 开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用. Express 不对 Node.js 已有的特性进行二次抽象,我们只是在它之上扩展了 Web 应用所需的基本功能. Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件. API 方面:丰富的 HTTP 快捷方法和任意排列组合的

Node.js的Connect框架的代码重写与改进

Node.js的Connect框架的代码重写与改进 Connect框架简介 Connect框架是建立在Node.js的基本http.server功能之上,帮助实现结构化的web服务器逻辑的框架.Connect框架建立在两个重要的设计模式之上. 1) 责任链模式 在处理web请求时常需要作分派处理.例如,ASP.NET MVC支持按照请求参数将处理分派至某个Controller类的某个Action方法,以及根据Action方法的返回结果类型分派不同的结果操作(如ViewResult.JsonRes

【11】 Express安装入门与模版引擎ejs

前言 Express简介和安装 运行第一个基于express框架的Web 模版引擎 ejs express项目结构 express项目分析 app.set(name,value) app.use([path], function) app.get(name) 路由文件index.js 前言 前面也学习了一些Node.js的基本入门知道,现在开始进入Web开发的部分: Node.js提供了http模块,这个模块中提供了一些底层接口,可以直接使用,但是直接开发网站那还是太累了,所以http模块也不单

Node.js Express 框架

Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网站. Express 框架核心特性: 可以设置中间件来响应 HTTP 请求. 定义了路由表用于执行不同的 HTTP 请求动作. 可以通过向模板传递参数来动态渲染 HTML 页面. 安装 Express 安装 Express 并将其保存到依赖列表中: $ cnpm install

nodejs(三)上之express

express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网站 安装并运行 sudo npm install express var express = require("express"); var app = express();//初始化 核心功能 路由 get方法 - 根据请求路径来处理客户端发出的GET请求 app.

基于Node.js和express的日志服务器

首先,这篇文章学习的意义大于实际价值.如果按我的本意,直接在游戏中加入友盟,信息更全,而且非常简单.不过总是有很多人会凭着自己过时或者错误的经验去说别的东西多么不好,自己的东西多么好.好在,我自认为学习能力非常强,解决问题的能力也非常强.真让我做一个服务器+前端,也是在兴趣之中和能力之内. 一.Node.js简介 原本javascript纯粹是一个前端语言,干的基本上是让网页更丰富更炫的事情.不过Node.js出现后,javacript成为了前后端通吃的语言.比如网易的pomelo就是基于Nod

express学习 nodejs

Express Express简介 一个简洁.灵活 node.js Web应用开发框架, 提供一系列强大的功能,比如:模板解析.静态文件服务.中间件.路由控制等等 可以使用插件或整合其他模块来帮助你创建各种 Web和移动设备应用 目前最流行的基于Node.js的Web开发框架 支持Ejs.jade等多种模板,可以快速地搭建一个完整功能的网站 Express创建 var express = require('express'); var app = express(); app.get('/',

Node.js连接Mysql,并把连接集成进Express中间件中

引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以单独对mysql配置,也可以把connection集成到express中间件中. 最后送上一个node.js 连接各种主流数据库示例代码. 前提条件 1.安装mysql对应的驱动,npm install mysql 2.安装第三方插件express-connection, npm install e