express知识点总结

339 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天,点击查看活动详情

express

Express 是一个第三方模块,用于快速搭建服务器。它是一个基于 Node.js 平台,快速、开放、极简的 web 开发框架

express保留了http模块的基本API,使用express的时候,也能使用http的API, 它还额外封装了一些新方法,能让我们更方便的搭建服务器。

构造Web服务器

使用Express构建Web服务器步骤有以下四步:

  1. 加载 express 模块
  2. 创建 express 服务器
  3. 开启服务器
  4. 监听浏览器请求并进行处理
// 使用express 搭建web服务器
// 1) 加载 express 模块
const express = require('express');

// 2) 创建 express 服务器
const app = express();

// 3) 开启服务器
app.listen(3006, () => console.log('express服务器开始工作了'));

// 4) 监听浏览器请求并进行处理

app.get('GET请求的地址', 处理函数);

app.post('POST请求的地址', 处理函数);

express方法

express之所以能够实现web服务器的搭建,是因为其内部对核心模块http进行了封装。封装之后,express提供了非常方便好用的方法。在express中,我们仍然可以使用http模块中的方法

  • express

    • express.static() -- 开放静态资源
    • express.urlencoded() -- 获取POST请求体
    • 其他...
  • app

    • app.get() -- 处理客户端的GET请求
    • app.post() -- 处理客户端的POST请求
    • app.use() -- 设置应用级别的配置
    • 其他...
  • req

    • req.body -- 获取POST请求体
    • req.params -- 获取GET请求动态参数
    • req.query -- 获取GET请求参数(获取查询字符串参数)
    • 其他...
  • res

    • res.sendFile(文件的绝对路径) -- 读取文件,并将结果响应
    • res.set({name, value}) -- 设置响应头
    • res.status(200) -- 设置响应状态码
    • res.send(字符串或对象) -- 响应结果
    • res.json(对象) -- 以JSON格式响应结果
    • res.jsonp() -- 以JSONP格式响应结果
const express = require('express');
const app = express();
app.listen(3006, () => console.log('启动了'));

app.get('/test', (req, res) => {
    // express提供的新方法:res.send(); -- 做出响应,参数是响应体
    // res.send('hello,我是服务器'); // 会自动设置响应头
    // res.end(["aaa", "bbb", "ccc"]); // 报错,end方法,只能填字符串参数
    // res.send(["aaa", "bbb", "ccc"]); // 对于数组、对象等,会自动JSON.stringify()

    // express提供的新方法:sendFile(); -- 参数是一个文件(绝对)路径,会自动读取文件的内容,做出响应
    // res.sendFile(path.join(__dirname, 'books.json'));

    // express提供的新方法:res.json() -- 专门用于响应json数组的方法
    // res.json({
    //     status: 0,
    //     message: '添加成功'
    // });

    // express提供的新方法:res.set() -- 设置响应头一样,不能设置状态码
    res.set({
        'Author': 'zhangsan'
    });
    res.send('看看响应头');
});

get接口

app.get('*', (req, res) => {}) 他能够匹配到所有的GET请求,所以把它放到所有接口的最后。

// app.get('请求的URL', callback);
app.get('/api/getbooks', (req, res) => {
    // 处理GET方式的/api/getbooks接口
});

app.get('/', (req, res) => {
    // 客户端没有指定请求的url,在这里处理。
});

app.get('*', (req, res) => {
    // 处理所有的GET请求
})

POST接口

// app.post('请求的URL', callback);
app.post('/api/addbook', (req, res) => {
    // 处理POST方式的/api/addbook接口
});

app.post('*', (req, res) => {
    // 处理所有的POST请求
})

路由

在 Express 中,路由指的是客户端的请求与服务器处理函数之间的映射关系。Express 中的路由分 3 部分组成,分别是请求的类型、请求的 URL 地址、处理函数,格式如下:

// 路径 ,就是我们之前说的接口的处理程序
app.get('/api/getbooks', (req, res) => {
    
});

app.post('/api/getbooks', (req, res) => {
    
});

app.post('/api/addbook', (req, res) => {
    
});

每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。

在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的 URL 同时匹配成功,则 Express 会将这次请求,转 交给对应的 function 函数进行处理。

为了方便对路由进行模块化的管理,Express 不建议将路由直接挂载到 app 上,而是推荐将路由抽离为单独的模块。 将路由抽离为单独模块的步骤如下:

  1. 创建路由模块对应的 .js 文件

    • 创建router/login.js 存放 登录、注册、验证码三个路由
    • 创建router/heroes.js 存放 和英雄相关的所有路由
  2. 调用 express.Router() 函数创建路由对象

const express = require('express');
const router = express.Router();
  1. 向路由对象上挂载具体的路由
// 把app换成router,比如
router.get('/xxx/xxx', (req, res) => {});
router.post('/xxx/xxx', (req, res) => {});
  1. 使用 module.exports 向外共享路由对象
module.exports = router;
  1. 使用 app.use() 函数注册路由模块 -- app.js
// app.js 中,将路由导入,注册路由
const login = require('./router/login.js');
app.use(login)

// app.use(require('./router/heroes.js'));
app.use( require(path.join(__dirname, 'router', 'heores.js')) );