在 Node.js 中添加 Express 中间件


应用中的每个请求都会通过 Express 中的多个中间件。如果其中一个中间件返回响应,则请求处理在此结束。如果任何中间件想要将请求传递给下一个中间件,它会在其函数调用的末尾使用 next() 函数调用。

HTTP 请求 -> 中间件 (req, resp, next) -> 中间件 (req, res, next) -> HTTP 响应 (res.send())。

const http = require('http');
const express = require('express');
const app = express();
app.use((req, res,next)=>{
   console.log('first middleware');
});
const server = http.createServer(app);
server.listen(3000);

中间件是使用 use 函数添加的,如上所示。Use() 函数基本上接收三个参数:请求、响应和 next() 函数。

use() 函数添加到服务器创建函数之前。现在,添加第二个中间件:

运行应用:

打开浏览器并导航到 localhost:3000

在终端控制台中,我们将看到日志消息:

在第一个中间件中,我们使用了 next() 函数调用来将 HTTP 请求传递给调用栈中的下一个中间件。中间件通常按照它们在文件中定义的顺序工作。

从中间件发送响应

Express 提供了一个 send() 函数来返回任何类型的响应,例如 html、文本等。我们也可以继续使用旧的 write 函数。在这里,我们不需要设置 header,Express 会自动完成。

app.use((req, res,next)=>{
   console.log('second middleware');
   res.send('<h1> Hello Tutorials Point </h1>');
});

Nodemon 将在代码更改时自动重启应用程序:

在 Express.js 中,默认的 content type 为 text/html。我们可以使用 response.setHeader() 函数覆盖默认的 header 值。

如果我们在第一个中间件中删除 next() 函数调用:

const http = require('http');
const express = require('express');
const app = express();
app.use((req, res,next)=>{
   console.log('first middleware');
   //next();
   res.send('<h1> first midleware: Hello Tutorials Point </h1>');
});
app.use((req, res,next)=>{
   console.log('second middleware');
   res.send('<h1> second middleware: Hello Tutorials Point </h1>');
});
const server = http.createServer(app);
server.listen(3000);

注意,我们注释掉了第一个中间件中的 next() 函数调用

因此,我们的 HTTP 请求将不会到达第二个中间件,我们只会看到第一个中间件的响应。

更新于:2020年5月13日

333 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告