node.js 关于express框架使用及其“中间件“概念的理解

本文介绍了Node.js的Express框架,重点讲解了中间件的概念,包括next的使用、上下文的理解以及堆栈式调用的工作原理。通过实例展示了中间件如何处理请求和响应,强调了中间件在解耦模块、简化后端逻辑中的重要作用。
摘要由CSDN通过智能技术生成

前言

上一篇:node.js在windows和ubuntu下安装及其简单使用

提到如何安装并且使用node.js来运行一个简单的后端程序,但是因为原生的node,要运行一个接口,非常麻烦,所以我们需要用到一些框架来快速开发。比较热门的框架就是express了。

express自带路由功能,可以侦听指定路径的请求,除此之外,express最大的优点就是【中间件】概念的灵活运用,使得各个模块得以解耦,像搭积木一样串起来就可以实现复杂的后端逻辑。除此之外,还可以利用别人写好的中间件,避免重复造轮子。

npm工具

npm是nodejs中的包管理工具,类似python中的pip,可以下载安装一些辅助的包或者中间件,非常方便。

使用以下命令安装express包,Linux下记得加sudo

npm install express

安装好之后,如果运行时报错找不到express,那么我们可以利用npm将express和当前目录进行关联

npm link express

中间件

express的中间件很简单,其实就是一个函数,拥有req, res, next三个入口参数,分别表示请求上下文,响应上下文,下一个中间件。

function(req, res, next) {
   
    
}

使用一段简单的代码就能完成helloworld,现在再回过头来看中间件的概念。

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

// 定义简单hello中间件
var middleware = function(req, res, next) {
   
    res.end("hello world");
}

// 使用中间件
app.get('/test', middleware);

app.listen(8888);
console.log("开始运行于 localhost:8888");

首先我们定义一个中间件名叫middleware,并且通过app.use把中间件绑定到请求管道中(这里请求管道是我瞎编的词),请求对象会按照use函数调用的顺序,逐个经过我们use的中间件,每个中间件都可以对请求对象做处理。

我们可以由如下的 代码 -> 中间件结构 图来快速理解。(因为堆栈式的调用,这张图并不完全正确,实际上还有返回的过程,下文会讲。。)

在这里插入图片描述
中间件会对每经过的请求对象做出对应的处理,比如上文的代码中,我们直接将这个请求返回了。

next

在中间件的三个参数中,还有一个next参数,它表示了通往下一个中间件的路。通过调用next可以将请求发送给下一个中间件

next();

值得注意的是,如果不调用next,那么请求到这里就断了,就不会传递给下一个中间件了。

我们编写三个中间件,以看看这种类似链表的顺序调用,是怎样运作的。

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

var mw1 = function(req, res, next) {
   
    console.log("请求经过中间件1");
    next();
}
var mw2 = function(req, res, next) {
   
    console.log("请求经过中间件2");
    next();
}
var mw3 = function(req, res, next) {
   
    console.log("请求经过中间件3");
    res.end("hello world");
    // 最底部的中间件就不用next了 直接返回响应体
} 

// 按照顺序注册中间件
app.get('/test', mw1);
app.get('/test', mw2);
app.get('/test', mw3);

app.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值