跳到主要内容

Express

Express 是什么

Express 是一个快速,简单,极简的 Node.js web 应用开发框架。通过它,可以轻松的构建各种 web 应用。例如:

  • 接口服务
  • 传统 web 网站
  • 开发工具集成等

Express 本身是极简的,仅仅提供了 web 开发的基础功能,但是它通过中间件的方式集成了许许多多的外部插件来出来 HTTP 请求。

  • body-parser:解析 HTTP 请求体
  • compression:压缩 HTTP 响应
  • cookie-parer:解析 cookie 数据
  • cor:处理跨域资源请求
  • morgon:HTTP 请求日志记录

Express 中间件的特性固然强大,但是它所提供的灵活性就是一把双刃剑。

  • 它让 Express 本身变得更加灵活和简单
  • 它的缺点虽然有一些中间件包可以解决几乎所有的问题和需求,但是跳转合适的包有时也会成为一个挑战。

Express 不对 Node.js 已有的特征进行二次抽象,只是在它之上扩展了 web 应用所需的基本功能。

  • 内部使用的还是 http 模块
  • 请求对象集成 http.IncommingMessage
  • 响应对象继承自 http.ServerResponse

Express 特性

  • 简单易学
  • 丰富的基础 API 支持,以及常见的 HTTP 辅助程序,例如重定向、缓存等
  • 强大的路由功能
  • 灵活的中间件
  • 高性能
  • 非常稳定(源码几乎100%的测试覆盖率)
  • 视图系统支持 14 个以上的主流模板引擎

Express 发展历史

  • Express.js 由 TJ Holowaychuk 创立。首次发行的版本 0.12.0,依据 Express.js 的 Github 仓库,是在 2010年5月22日。
  • 在 2014.6, StrongLoop 获得了项目的管理权。StrongLoop 在 2015.9 被 IBM 并购。在 2016年1月, IBM 宣布将 Express.js 置于 Node.js 基金会孵化器的管理之下。

Express 应用场景

  • 传统的 web 网站 Ghost...
  • 接口服务
  • 服务端渲染中间层
  • 开发工具, JSON Server webpack-dev-server

基础 demo

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
res.send('Hello World!');
});

app.post('/', function (req, res) {
res.send('Got a POST request');
});

// 要为express.static函数提供的文件创建虚拟路径前缀(该路径实际上并不存在于文件系统中)
// 请为静态目录指定一个挂载路径
app.use('/static', express.static('public'));

app.use(function (req, res, next) {
res.status(404).send("Sorry can't find that!");
});

app.use(function (err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});

app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});