node之express
什么是express
Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
express之hello world
- 引入模块
1 | let express = require("express") |
- express之中间件
1 | <!-- express 和上面的模块名对应 --> |
express之静态服务
- 将静态资源文件所在的目录作为参数传递给express.static中间件就可以提供静态资源文件的访问
1 | app.use(static("pubic")) |
- 可以创建多个静态资源文件目录,多次调用express.static()
1 | app.use(express.static('public')); |
- 如果你希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示
1 | app.use('/static', express.static('public')); |
现在,可以通过带有 “/static” 前缀的地址来访问 public 目录下面的文件了;
1 | http://localhost:3000/static/images/kitten.jpg |
express之路由
路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。
路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成,它的结构如下: app.METHOD(path, [callback…], callback), app 是 express 对象的一个实例, METHOD 是一个 HTTP 请求方法, path 是服务器上的路径, callback 是当路由匹配时要执行的函数。1
2
3
4
5let express = require('express')
var app = express()
app.get('/', function(req, res) {
res.send('hello world')
});路由方法:路由方法源于 HTTP 请求方法,和 express 实例相关联。
注意:app.all() 是一个特殊的路由方法,没有任何 HTTP 方法与其对应,它的作用是对于一个路径上的所有请求加载中间件。1
2
3
4app.all('/secret', function (req, res, next) {
console.log('Accessing the secret section ...');
next(); // pass control to the next handler
});路由路径
使用字符串模式的路由路径示例:1
2
3
4
5
6
7
8
9
10
11
12
13//?表示前面的字符0到1次
app.get('/ab?cd', function(req, res) {
res.send('ab?cd');
});
// * 表示0到多次
app.get('/ab*cd', function(req, res) {
res.send('ab*cd');
});
// ()表示分组
app.get('/ab(cd)?e', function(req, res) {
res.send('ab(cd)?e');
});app.route()
可使用 app.route() 创建路由路径的链式路由句柄。由于路径在一个地方指定,这样做有助于创建模块化的路由,而且减少了代码冗余和拼写错误。
1 | app.route('/book') |
- express.Router
可使用 express.Router 类创建模块化、可挂载的路由句柄。Router 实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”。
下面的实例程序创建了一个路由模块,并加载了一个中间件,定义了一些路由,并且将它们挂载至应用的路径上。
1 | //路由模块 |
引用路由模块
1 | const express = require('express'); |
express之中间件
什么叫中间件.
中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。中间件的功能和分类
功能:
1. 执行任何代码。 2. 修改请求和响应对象。 3. 终结请求-响应循环。 4. 调用堆栈中的下一个中间件。
分类:
1. 应用级中间件。 2. 路由级中间件。 3. 错误处理中间件。 4. 内置中间件。 5. 第三方中间件。
更多细节请见官方文档