这是我参与更文挑战的第 9 天,活动详情查看: 更文挑战
Lynne,一个能哭爱笑永远少女心的前端开发工程师。身处互联网浪潮之中,热爱生活与技术。
前言
果然带着目的去学习效率更高,每次学习nodeJS都是看完就忘。
今天来讲讲 node 中间件的学习心得吧!
node 中间件概念
什么是中间件?
从字面意义上来,就是在软件的一层和另一层中间放置的处理函数。
Node 中间件是在对 Node 服务器请求的生命周期内所执行的函数。
每个中间件都可以访问其被附加到的所有路由的 HTTP 请求和响应。
另外,中间件可以终止 HTTP 请求,也可以用 next 将其传递给另一个中间件函数。中间件的这种“链”使你可以对代码进行划分并创建可重用的中间件。
简单来说就是:中间件是从http请求开始到响应结束过程中的处理逻辑,通常需要对请求和响应进行处理。
为什么使用中间件?
那么中间件解决了什么问题呢?
假设你在 web 网络服务器上正在使用 Node.js 运行Web应用程序,并且你需要登录该应用的某些页面。
当 Web 服务器收到数据请求时,node 将为你提供一个请求对象,其中包含有关用户及其所请求数据的信息。 node 还使你可以访问响应对象,可以在Web服务器响应用户之前对其进行修改。这些对象通常缩短为 req,res。
中间件函数是使用相关信息修改 req 和 res 对象的理想场所。例如用户登录后,你可以从数据库中获取其用户详细信息,然后将这些详细信息存储在 res.user 中。
一个简单中间件
通过一个简单中间件介绍中间件基本结构。
举个栗子
康康别人的中间件长什么样子?前面介绍过,中间件本质上是一个处理函数,所以看到的就是下面这样一个函数:
async function userMiddleware (req, res, next) {
try {
const userData = await getUserData(req.params.id); //see app.get below
if(userData) {
req.user = userData;
next();
}
} catch(error) {
res.status(500).send(error.message); //replace with proper error handling
}
}
复制代码
错误处理中间件
错误处理中间件,如:app.use(err,req,res,next)
错误处理中间件始终采用四个参数(err,req,res,next)。你必须通过提供四个参数来将其标识为错误处理中间件函数。即使你不需要使用 next 对象,也必须指定。否则 next 对象将被解释为常规中间件,并将会无法处理错误。
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
复制代码
中间件使用
通过 app.use 调用中间件,你还可以在中间件数组中或着通过使用多个 app.use 调用来链接中间件:
app.use(middlewareA);
app.use(middlewareB);
app.get('/', [middlewareC, middlewareD], handler);
复制代码
node 收到请求后,与请求相匹配的每个中间件都将会按照初始化的顺序运行:middlewareA–> middlewareB –> middlewareC –> middlewareD,直到有终止操作为止。
总结
一句话总结:中间件可以对每个请求或针对特定路由的每个请求运行代码,并对请求或响应数据采取措施。