【Node入门系列】Express 框架的简单使用(4)

154 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Express 中文官网

tip 学习目标

  1. 能够使用 express.static() 快速托管静态资源
  2. 能够使用 express 路由精简项目结构
  3. 能够使用常见的 express 中间件
  4. 能够使用 express 创建 API 接口
  5. 能够在 express 中启用 cors 跨域资源共享

Express 框架的简单使用

1. 什么是 Express

官方给出的概念:Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。

通俗的理解:Express 的作用和 Node.js 内置的 http 模块类似,是专门用来创建 Web 服务器的。

Express 的本质:就是一个 npm 上的第三方包,提供了快速创建 Web 服务器的便捷方法。

2. 进一步理解 Express

思考:不使用 Express 能否创建 Web 服务器?

答案:能,使用 Node.js 提供的原生 http 模块即可。

思考:既生瑜何生亮(有了 http 内置模块,为什么还有用 Express)?

答案:http 内置模块用起来很复杂,开发效率低;Express 是基于内置的 http 模块进一步封装出来的,能够极大的提高开发效率。

思考:http 内置模块与 Express 是什么关系?

答案:类似于浏览器中 Web API 和 jQuery 的关系。后者是基于前者进一步封装出来的。

3. Express 能做什么

对于前端程序员来说,最常见的两种服务器,分别是:

  • Web 网站服务器:专门对外提供 Web 网页资源的服务器。

  • API 接口服务器:专门对外提供 API 接口的服务器。 使用 Express,我们可以方便、快速的创建 Web 网站的服务器或 API 接口的服务器

4. 安装 express

在项目所处的目录中,运行如下的终端命令,即可将 express 安装到项目中使用:

npm i express@4.17.1

其他版本也可以

5. 使用 express 创建基本的服务器

// 1. 导入 express
const express = require('express')

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

// 4. 监听客户端的 GET 和 POST 请求,并向客户端响应具体的内容
app.get('/user', (req, res) => { ... })
app.post('/user', (req, res) => { ... })

// 3. 启动服务器,调用 app.listen(端口号,启动成功后的回调函数)
app.listen(80, () => {
  console.log('express server running at http://127.0.0.1');
})

6. 监听 GET 请求

通过 app.get() 方法,可以监听客户端的 GET 请求,具体的语法格式如下:

// 参数1:客户端请求的 URL 地址
// 参数2:请求对应的处理函数
//        req: 请求对象(包含了与请求相关的属性与方法)
//        res: 响应对象(包含了与响应相关的属性与方法)
app.get('请求URL', (req, res) => {
  // 处理函数
})

7. 监听 POST 请求

通过 app.post() 方法,可以监听客户端的 POST 请求,具体的语法格式如下:

// 参数1:客户端请求的 URL 地址
// 参数2:请求对应的处理函数
//        req: 请求对象(包含了与请求相关的属性与方法)
//        res: 响应对象(包含了与响应相关的属性与方法)
app.post('请求URL', (req, res) => {
  // 处理函数
})

8.把内容响应给客户端

通过 res.send() 方法,可以把处理好的内容,发送给客户端:

// 监听 get 请求
app.get('/user', (req, res) => {
  // 调用 express 提供的 res.send() 方法,向客户端响应一个 JSON 对象
  res.send({name: 'jack', age: 21, gender: 'male'})
})

// 监听 post 请求
app.post('/user', (req, res) => {
  // 向客户端响应一个文本字符串
  res.send('post 请求成功!')
})

9. 获取 URL 中携带的查询参数

通过 req.query 对象,可以访问到客户端通过查询字符串的形式,发送到服务器的参数

app.get('/', (req, res) => {
  // req.query 默认是一个空对象
  // 客户端使用 ?name=jack&age=22 这种查询字符串形式,发送到服务器的参数
  // 可以通过 req.query 对象访问到,例如:
  // req.query.name  req.query.age
  console.log(req.query);
  res.send(req.query)
})

10. 获取 URL 中的动态参数

通过 req.params 对象,可以访问到 URL 中,通过 : 匹配到的动态参数

// URL 地址中,可以通过 :参数名 的形式,匹配动态参数值
// 注意:这里的 :id 是一个动态的参数(冒号 : 固定写法,id 为合法参数即可)
// 如果请求的是 /user/1 ,则 req.params = { id : 1 }
// 也可以写多个动态参数  /user/:id/:name
app.get('/user/:id', (req, res) => {
  // req.params 是动态匹配到的 URL 参数,默认也是一个空对象
  console.log(req.params);
  res.send(req.params)
})

11. 托管静态资源(重点)

express 提供了一个非常好用的函数,叫做 express.static(),通过它,我们可以非常方便地创建一个静态资源服务器, 例如,通过如下代码就可以将 public 目录下的图片、CSS 文件、JavaScript 文件对外开放访问了:

  1. 在这里,调用 express.static() 方法,快速的对外提供静态资源
  2. 如果要托管多个静态资源目录,请多次调用 express.static() 函数
  3. express.static() 函数会根据目录的添加顺序查找所需的文件
const express = require('express')
const app = express()

// 调用 express.static() 方法,快速的对外提供静态资源
app.use(express.static('./clock'))
app.use(express.static('./files'))

app.listen('80', () => {
  console.log('express server running at http://127.0.0.1');
})

12. 挂载路径前缀

如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以使用如下的方式:

app.use('/files', express.static('./files'))

13. nodemon 工具

在编写调试 Node.js 项目的时候,如果修改了项目的代码,则需要频繁的手动 close 掉,然后再重新启动,非常繁琐。

现在,我们可以使用 nodemon 这个工具,它能够监听项目文件的变动,当代码被修改后,nodemon 会自动帮我们重启项目,极大方便了开发和调试。

在终端中,运行如下命令,即可将 nodemon 安装为全局可用的工具

npm i nodemon -g

在项目中使用 nodemon,将 node app.js 改为了以下命令:

nodemon app.js

每文一句;鸟欲高飞先振翅,人求上进先读书。

Node入门系列尚未完结,本次的分享就到这里,如果本章内容对你有所帮助可以点赞+收藏,希望大家都能够有所收获。有任何疑问都可以在评论区留言,大家一起探讨、进步!