花 15 分钟把 Express.js 搞明白,全栈没有那么难

Express 是老牌的 Node.js 框架 , 以简单和轻量著称 , 几行代码就可以启动一个 HTTP 服务器 。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关 。
Express 框架使用标准 Node.js 语法,主要由以下 3 个核心部分组成:

  • 路由 。
  • 中间件 。
  • 错误处理 。
认识基本结构Express 的基本结构很简单,只需要三行代码,应用就可以运行起来 。
const express = require('express')const App = express()app.listen(9000, () => console.log('启动成功'))假设上述代码写在 index.js 中,我们启动该应用使用命令 node ./index.js,控制台会输出“启动成功” 。
为了方便,我们也可以在 package.json 中创建快捷命令,如下:
【花 15 分钟把 Express.js 搞明白,全栈没有那么难】// package.json{"scripts": {"start": "node ./index.js"}}那么现在启动应用就可以用 npm run start 命令 。
不过这种方式在本地运行项目时会有一个弊端,就是修改文件后不会立即生效,需要重新启动 。为了提高效率,一般会使用一个名为 PM2 的模块启动 Node.js 应用 。
首先全局安装 pm2:
$ npm install -g pm2安装后在项目目录下创建启动配置文件 ecosystem.config.js,代码如下:
module.exports = {apps: [{name: 'first-api',script: './index.js',},],}然后在项目目录下执行以下命令就可以启动项目了:
$ pm2 start --watch
花 15 分钟把 Express.js 搞明白,全栈没有那么难

文章插图
上图中的 0 就是启动应用的 ID,下面会用到 。
PM2 常用大命令如下:
  • pm2 start:启动应用,--watch 表示监听文件修改自动重启 。
  • pm2 list:查看已启动的应用列表 。
  • pm2 logs <id>:查看日志输出 。
  • pm2 delete <id>:删除指定应用 。
应用启动后监听 9000 端口,但访问 “http://localhost:9000” 却没有反应,请求被挂起,这是因为没有设置如何处理请求 。
Express 中通过定义路由来处理请求 。
使用路由创建 API 接口路由用于定义如何处理请求 , 定义方式采用以下结构:
app.METHOD(PATH, HANDLER)其中 app 表示 Express 的实例,其余的三个部分都属于路由配置,表示的含义如下:
  • METHOD:路由方法 。
  • PATH:路由地址 。
  • HANDLER:路由处理函数 。
比如示例代码中的路由是这样子:
app.get('/', (req, res) => {res.send('Hello World')})使用app.get()定义了一个 GET 请求的路由,第一个参数 “/” 为路由地址,第二个参数为路由处理函数,是一个回调函数,该函数接受两个参数分别表示请求和响应 。
当路由方法和路由地址匹配到用户请求时,路由处理函数就会执行 。
路由方法根据基本 API 规则支持五种,分别如下:
  • app.get():GET 请求 。
  • app.post():POST 请求 。
  • app.put():PUT 请求 。
  • app.delete():DELETE 请求 。
  • app.all():匹配所有请求 。
以上五个方法的参数都与示例路由一致 。定义好路由后,我们的主要任务是在路由处理函数中编写业务代码,一般会包括接收请求参数、返回接口响应,这里要用到路由处理函数的两个参数 。
请求对象路由处理函数的第一个参数表示请求对象,包含客户端请求携带的相关数据,常用的属性如下:
  • req.query:URL 附加参数 。
  • req.body:请求体参数 。
  • req.method:请求方法 。
  • req.headers:请求头对象 。
  • req.params:URL 地址参数 。
现在我们定义一个路由,将请求对象的这几个属性返回,看一下它们的值是什么:
app.post('/first/:id', (req, res) => {let { method, query, body, params, headers } = reqres.send({ method, query, body, params, headers })})


推荐阅读