node express的中间件服务开发

463 阅读4分钟

1.什么是 Node?

以下摘自MDN

Node(正式名称 Node.js)是一个开源的、跨平台的运行时环境,有了它,开发人员可以使用 JavaScript 创建各种服务器端工具和应用程序。此运行时主要用于浏览器上下文之外(即可以直接运行于计算机或服务器操作系统上)。据此,该环境省略了一些浏览器专用的 JavaScript API,同时添加了对更传统的 OS API(比如 HTTP 库和文件系统库)的支持。

2.什么是Express

以下摘自MDN Express 是最流行的 Node 框架,是许多其它流行 Node 框架 的底层库。它提供了以下机制:

  • 为不同 URL 路径中使用不同 HTTP 动词的请求(路由)编写处理程序。
  • 集成了“视图”渲染引擎,以便通过将数据插入模板来生成响应。
  • 设置常见 web 应用设置,比如用于连接的端口,以及渲染响应模板的位置。
  • 在请求处理管道的任何位置添加额外的请求处理“中间件”。

可以看到Express就是个node框架。其中在请求任何位置添加额外处理。就是我们要说的中间件。

3.什么是中间件

那中间件又是什么呢。中间件这个三个字听起来,挺唬人的。其实中间件的本质就是函数。可以理解为在请求处理的过程中插入各种功能的中间件函数。每个中间函数都可以很简单。而有很多函数组成的中间件服务就可以很复杂了。功能很多。 下面就是一个中间函数。可以看到函数有三个参数。请求对象 (req)、响应对象 (res) 以及应用程序的请求/响应循环中的下一个中间件函数。 还有一个关键的next()函数。如果当前中间件函数没有结束请求/响应循环,那么它必须调用 next(),以将控制权传递给下一个中间件函数。否则,请求将保持挂起状态。

const express = require('express');
const app = express();

// 示例中间件函数
const a_middleware_function = (req, res, next) => {
  // ... 进行一些操作
  next(); // 调用 next() ,Express 将调用处理链中下一个中间件函数。
};

// 用 use() 为所有的路由和动词添加该函数
app.use(a_middleware_function);

下面我们看一个题,如果这个node服务被访问,会打印什么。

const express = require('express')
const app = express()
const port = 3000

/////////////////////////////////
主要看这一部分

const a_middleware_function = (req, res, next) => {
  console.log("befor a")
  next(); // 调用 next() ,Express 将调用处理链中下一个中间件函数。
  console.log("after a")
};

// 示例中间件函数
const b_middleware_function = (req, res, next) => {
  console.log("befor b")
  next(); // 调用 next() ,Express 将调用处理链中下一个中间件函数。
  console.log("after b")
};

// 用 use() 为所有的路由和动词添加该函数
app.use(a_middleware_function);
app.use(b_middleware_function);

/////////////////////////////////
app.get('/', (req, res) => {
  res.send('Hello World!')
})
app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

答案,这就是中间件的执行顺序。

1.png

4.中间件项目的搭建

这个方法有很多啊,我这里说一下,express中文网的一种方法,下面是文档。照着文档操作即可。 www.expressjs.com.cn/starter/gen…

安装好后,结构如下。

2.png

npn run start  启动项目

访问 http://localhost:3000/ 成功

3.png

我们回过头再看一下app.js 文件 发现有注册两个路由 我先试一下users 4.png

他这里就是路由分了块了。访问users都去找 routes下的users文件 2.png

users里面就一个跟路径。如果我们再写一个/XXX。那么他实际路径就相当于users/XXX

3.png

访问一下http://localhost:3000/users 没问题,按代码写的返回了。/users就是一个接口。我们访问其实就发了一个get请求。

2.png

同理,我们刚在直接访问的跟路径,道理是一样的就是返回了之前说过的页面模版。

我们再在app.js里加入,我们写的中间件代码。

2.png

重启在访问一下 http://localhost:3000/

可以看到,只要有请求带到我们服务上。就会进过中间件函数。

1618208641604.jpg

之后我们就可以按照需求完善我们的中间件。其本质就是函数。需要什么样的功能,我们就写什么样的中间件函数就好了。

5.参考资料

1.MDN Express/Node 入门

2.Express 中文网