什么是express

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。

express之hello world

  1. 引入模块
1
let express = require("express")
  1. express之中间件
1
2
 <!-- express 和上面的模块名对应  -->
express.use();

express之静态服务

  1. 将静态资源文件所在的目录作为参数传递给express.static中间件就可以提供静态资源文件的访问
1
app.use(static("pubic"))
  1. 可以创建多个静态资源文件目录,多次调用express.static()
1
2
app.use(express.static('public'));
app.use(express.static('files'));
  1. 如果你希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示
1
app.use('/static', express.static('public'));

现在,可以通过带有 “/static” 前缀的地址来访问 public 目录下面的文件了;

1
http://localhost:3000/static/images/kitten.jpg

express之路由

  1. 路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。
    路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成,它的结构如下: app.METHOD(path, [callback…], callback), app 是 express 对象的一个实例, METHOD 是一个 HTTP 请求方法, path 是服务器上的路径, callback 是当路由匹配时要执行的函数。

    1
    2
    3
    4
    5
    let express = require('express')
    var app = express()
    app.get('/', function(req, res) {
    res.send('hello world')
    });
  2. 路由方法:路由方法源于 HTTP 请求方法,和 express 实例相关联。
    注意:app.all() 是一个特殊的路由方法,没有任何 HTTP 方法与其对应,它的作用是对于一个路径上的所有请求加载中间件。

    1
    2
    3
    4
    app.all('/secret', function (req, res, next) {
    console.log('Accessing the secret section ...');
    next(); // pass control to the next handler
    });
  3. 路由路径
    使用字符串模式的路由路径示例:

    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');
    });
  4. app.route()

可使用 app.route() 创建路由路径的链式路由句柄。由于路径在一个地方指定,这样做有助于创建模块化的路由,而且减少了代码冗余和拼写错误。

1
2
3
4
5
6
7
8
9
10
app.route('/book')
.get(function(req, res) {
res.send('Get a random book');
})
.post(function(req, res) {
res.send('Add a book');
})
.put(function(req, res) {
res.send('Update the book');
});
  1. express.Router

可使用 express.Router 类创建模块化、可挂载的路由句柄。Router 实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”。
下面的实例程序创建了一个路由模块,并加载了一个中间件,定义了一些路由,并且将它们挂载至应用的路径上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//路由模块
const express = require("express");
let router = express.Router();
router.get("/user",(req,res)=>{
res.end("get data");
})

router.post("/user",(req,res)=>{
res.end("post data");
})


router.put("/user",(req,res)=>{
res.end("put data");
})

router.delete("/user",(req,res)=>{
res.end("delete data");
})


module.exports = router;

引用路由模块

1
2
3
4
5
6
7
8
9
10
const express = require('express');
const router = require("./router.js")
const app = express();

app.use(express.static("pubic"));
//在应用中加载路由模块
app.use(router);
app.listen(3000,()=>{
console.log("running。。。。");
})

express之中间件

  1. 什么叫中间件.
    中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。

  2. 中间件的功能和分类

    功能:

    1. 执行任何代码。
    
    2. 修改请求和响应对象。
    
    3. 终结请求-响应循环。
    
    4. 调用堆栈中的下一个中间件。

    分类:

    1. 应用级中间件。
    
    2. 路由级中间件。
    
    3. 错误处理中间件。
    
    4. 内置中间件。
    
    5. 第三方中间件。 
  3. 更多细节请见官方文档