nodejs学习笔记——express基础

Express 是一个简洁而灵活的 node.js Web应用框架,提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。

Express 框架核心特性:

  • 可以设置中间件来响应 HTTP 请求
  • 定义了路由表用于执行不同的 HTTP 请求动作
  • 可以通过向模板传递参数来动态渲染 HTML 页面

一个hellow world

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

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

app.listen(port, () => 
console.log(`Example app listening on port ${port}!`))
  1. static 提供静态资源文件

  2. Express 支持对应于 HTTP 方法的以下路由方法:get、post、put、head、delete、options、trace、copy、lock、mkcol、move、purge、propfind、proppatch、unlock、report、mkactivity、checkout、merge、m-search、notify、subscribe、unsubscribe、patch、search 和 connect。

  3. 有一种特殊路由方法:app.all(),它并非派生自 HTTP 方法。该方法用于在所有请求方法的路径中装入中间件函数。

// 无论使用 GET、POST、PUT、DELETE 还是在http模块中支持的其他任何HTTP请求方法,
// 都将为针对“/secret”的请求执行处理程序。
app.all('/secret', function (req, res, next) {
  console.log('Accessing the secret section ...');
  next(); // pass control to the next handler
});
  1. 路由路径与请求方法相结合,用于定义可以在其中提出请求的端点。路由路径可以是字符串、字符串模式或正则表达式

  2. 您可以提供多个回调函数,以类似于中间件的行为方式来处理请求。唯一例外是这些回调函数可能调用 next('route') 来绕过剩余的路由回调。您可以使用此机制对路由施加先决条件,在没有理由继续执行当前路由的情况下,可将控制权传递给后续路由。例如:

var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}
var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}
var cb2 = function (req, res) {
  res.send('Hello from C!');
}

app.get('/example/c', [cb0, cb1, cb2]);

中间件

“Express是一个自身功能极简,完全是路由和中间件构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件。”

浏览器向服务器发送一个请求后,服务器直接通过request定位属性的方式得到通过request携带过去的数据(有用户输入的数据和浏览器本身的数据信息)。这中间就一定有一个函数将这些数据分类做了处理,已经处理好了,最后让request对象调用使用,对的,这个处理数据处理函数就是我们要说的 中间件 。

中间件能做什么:

  • 执行任意code.
  • 修改请求和请求object.
  • 结束请求-响应的循环.(如果当前中间件方法没有结束请求响应循环,必须执行 next() 将控制权递给下一个中间件.否则请求会一直处于hanging状态.)
  • 触发堆栈中的下一个中间件.

引申:Netflix的一次Express研究

netflix工程师们发现

  • 所有端点的路由处理器(route handler)保存在一个全局数组里
  • Express.js采用递归遍历所有路由处理器直至找到正确的处理器并调用

Yunong指出:“注意到对于路由/foo,有两个完全一样的路由处理器。更好的方式是,当路由处理器链中出现一个路由有多个路由处理器的情况时,Express.js抛出错误。”


参考

官方文档
express 调优的一个过程和心得,不错的文章

你可能感兴趣的:(nodejs学习笔记——express基础)