node知识点总结(七)

151 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

前言

大家好呀,我是L同学。在上篇文章node知识点总结(六)中,我们学习了node相关知识点,包括nodejs中的模块分类、模块作用域、导入导出模块、CommonJS规范等相关知识点。今天,在这篇文章中,我们来学习node的其他知识点,包括express介绍、如何安装express、使用Express构造Web服务器、get接口等相关知识点。

express

Express是一个第三方模块,用于快速搭建服务器。它是一个基于 Node.js 平台,快速、开放、极简的web开发框架。express保留了http模块的基本API,使用express的时候,也能使用http的API。express还额外封装了一些新方法,能让我们更方便的搭建服务器。

安装express

项目文件夹中,执行 npm i express。即可下载安装express。注意:express不能安装在express文件夹中。否则安装失败。

使用Express构造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之所以能够实现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('请求的URL', callback)。

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

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

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

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

获取GET方式请求的参数

获取url?参数=值&参数=值

app.get('/test', (req, res) => {
    console.log(req.query); // { id: '3', bookname: 'zxx', age: '20' }
});

获取 url/:id/:name/:age

  • 这种方式的参数,叫做动态参数
  • 请求地址的写法:http://localhost:3006/test/3/zs/30
  • 要求请求的url参数必填,否则不能和定义的接口匹配
// 1个参数
// 浏览器的请求  http://localhost/test/3
// 测试接口,获取动态参数
app.get('/test/:id', (req, res) => {
	console.log(req.params); // 可以获取所有的动态参数 { id: 3 }
    res.send('收到参数');
});

// 多个参数
// 浏览器的请求  http://localhost/test2/3/zhangsan/20
// 测试接口,获取多个动态参数
app.get('/test2/:id/:name/:age', (req, res) => {
    console.log(req.params); // 可以获取所有的动态参数  
    // { id: '4', name: 'zhangsan', age: '20' }
    res.send('全部收到');
});

post接口

app.post('请求的URL', callback);

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

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

获取POST请求体

GET方式没有请求体,POST方式才有请求体。请求体,即客户端提交的数据。我们仍然可以使用http模块中的语法,获取请求体。

POST请求体,有哪些格式

  • 查询字符串 -- 对应的Content-Type: application/x-www-form-urlencoded
  • FormData对象 -- 对应的Content-Type: multipart/form-data; --XXADFsdfssf