资讯专栏INFORMATION COLUMN

Express 文档(编写中间件)

nanchen2251 / 533人阅读

摘要:编写中间件中间件函数是可以访问请求对象响应对象以及应用程序请求响应周期中的函数的函数,函数是路由器中的一个函数,当被调用时,它会在当前中间件之后执行中间件。结束请求响应周期。此外,根路径路由的回调函数使用中间件函数添加到请求对象的属性。

编写中间件

中间件函数是可以访问请求对象(req)、响应对象(res)以及应用程序请求—响应周期中的next函数的函数,next函数是Express路由器中的一个函数,当被调用时,它会在当前中间件之后执行中间件。

中间件函数可以执行以下任务:

执行任何代码。

更改请求和响应对象。

结束请求—响应周期。

调用堆栈中的下一个中间件。

如果当前的中间件函数没有结束请求—响应周期,它必须调用next()将控制权传递给下一个中间件函数,否则,请求将被挂起。

下图显示了中间件函数调用的元素:

示例

以下是一个简单的“Hello World” Express应用程序示例,本文的其余部分将为应用程序定义和添加两个中间件函数:一个名为myLogger,用于打印简单的日志消息,另一个名为requestTime,用于显示HTTP请求的时间戳。

var express = require("express")
var app = express()

app.get("/", function (req, res) {
  res.send("Hello World!")
})

app.listen(3000)
中间件函数myLogger

这是一个名为“myLogger”的中间件函数的简单示例,当对应用程序的请求通过时,此函数只打印“LOGGED”,中间件函数被分配给名为myLogger的变量。

var myLogger = function (req, res, next) {
  console.log("LOGGED")
  next()
}
注意上面的调用next(),调用此函数会调用应用程序中的下一个中间件函数,next()函数不是Node.js或Express API的一部分,而是传递给中间件函数的第三个参数。next()函数可以命名为任何,但按照惯例,它总是被命名为“next”,为避免混淆,请始终使用此约定。

要加载中间件函数,请调用app.use(),指定中间件函数,例如,以下代码在到根路径(/)的路由之前加载myLogger中间件函数。

var express = require("express")
var app = express()

var myLogger = function (req, res, next) {
  console.log("LOGGED")
  next()
}

app.use(myLogger)

app.get("/", function (req, res) {
  res.send("Hello World!")
})

app.listen(3000)

每次应用程序收到请求时,它都会向终端输出消息“LOGGED”。

中间件加载的顺序很重要:首先加载的中间件函数也会先执行。

如果myLogger在到达根路径的路由之后加载,则请求永远不会到达它,并且应用程序不会打印“LOGGED”,因为根路径的路由处理程序会终止请求—响应周期。

中间件函数myLogger只是打印一条消息,然后通过调用next()函数将请求传递给堆栈中的下一个中间件函数。

中间件函数requestTime

接下来,我们将创建一个名为“requestTime”的中间件函数,并将一个名为requestTime的属性添加到请求对象中。

var requestTime = function (req, res, next) {
  req.requestTime = Date.now()
  next()
}

该应用程序现在使用requestTime中间件函数,此外,根路径路由的回调函数使用中间件函数添加到req(请求对象)的属性。此外,根路径路由的回调函数使用中间件函数添加到req(请求对象)的属性。

var express = require("express")
var app = express()

var requestTime = function (req, res, next) {
  req.requestTime = Date.now()
  next()
}

app.use(requestTime)

app.get("/", function (req, res) {
  var responseText = "Hello World!
" responseText += "Requested at: " + req.requestTime + "" res.send(responseText) }) app.listen(3000)

当你向应用程序的根目录发出请求时,应用程序现在会在浏览器中显示你的请求的时间戳。

因为你可以访问请求对象、响应对象、堆栈中的下一个中间件函数以及整个Node.js API,所以中间件函数的可能性是无穷无尽的。

有关Express中间件的更多信息,请参阅:使用Express中间件。

可配置的中间件

如果你需要中间件可配置,请导出一个接受选项对象或其他参数的函数,然后根据输入参数返回中间件实现。

文件:my-middleware.js

module.exports = function(options) {
  return function(req, res, next) {
    // Implement the middleware function based on the options object
    next()
  }
}

现在可以使用中间件,如下所示。

var mw = require("./my-middleware.js")

app.use(mw({ option1: "1", option2: "2" }))

有关可配置中间件的示例,请参阅cookie-session和compression。

上一篇:路由 下一篇:使用中间件

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100451.html

相关文章

  • Express 文档(错误处理)

    摘要:捕捉错误确保捕获运行路由处理程序和中间件时发生的所有错误非常重要。对和的调用表明当前处理程序已完成并处于什么状态,将跳过链中的所有剩余处理程序,除了那些设置为处理上述错误的处理程序。 错误处理 错误处理是指Express如何捕获和处理同步和异步发生的错误,Express附带一个默认的错误处理程序,因此你无需编写自己的错误处理程序即可开始使用。 捕捉错误 确保Express捕获运行路由处...

    mtunique 评论0 收藏0
  • Koa v2.x 中文文档 Koa 对比 Express

    摘要:使用承诺和异步功能来摆脱回调地狱的应用程序,并简化错误处理。它暴露了自己的和对象,而不是的和对象。因此,可被视为的模块的抽象,其中是的应用程序框架。这使得中间件对于整个堆栈而言不仅仅是最终应用程序代码,而且更易于书写,并更不容易出错。 Koa 与 Express 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新...

    summerpxy 评论0 收藏0
  • 从零开始编写React-Express单页博客应用(学习总结)

    摘要:单页博客应用编写总结很久之前就想写一个博客应用在一开始想要直接用和模板直接写但是暑假一开始的时候不小心入了的坑所以就一不做二不休直接用写那既然用了不写个单页应用也过意不去了不前前后后写了将近两个星期现在看来这其实是一个很容易的应用但是鉴于 React-Express单页博客应用编写总结 很久之前就想写一个博客应用.在一开始想要直接用express和ejs模板直接写, 但是暑假一开始的时...

    Jioby 评论0 收藏0
  • Express 文档(目录)

    摘要:文档基于的快速开放极简主义的框架,是一个最小且灵活的应用程序框架,为和移动应用程序提供了一组强大的功能。借助无数的实用程序方法和中间件,你可以快速轻松地创建强大的。提供了一层轻薄的基本应用程序功能,而不会隐藏你熟悉和喜爱的功能。 Express 文档 基于Node.js的快速、开放、极简主义的Web框架,Express是一个最小且灵活的Node.js Web应用程序框架,为Web和移动...

    马忠志 评论0 收藏0
  • Koa v2.x 中文文档 常见问题

    摘要:常见问题此系列文章的应用示例已发布于可以帮助改进或关注更新欢迎替代它更像是,但是很多的好东西被转移到的中间件级别,以帮助形成更强大的基础。这使得中间件对于整个堆栈而言不仅仅是最终应用程序代码,而且更易于书写,并更不容易出错。 常见问题 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Koa...

    Paul_King 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<