express框架--中间件--匹配路由

        middleware, 中间件是一个特殊的url地址处理函数,它被当作 app.use(中间件函数) 的参数或者是某个路由处理函数中使用。

        中间件是 express 的最大特色,也是最重要的一个设计。Express是一个自身功能极简,完全是路由和中间件构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件一个 express 应用,就是由许许多多的中间件来完成的  

中间件是一个函数 中间件肯定不止一个,多个中间件按顺序执行

中间件-基本使用

// 具名函数格式:
const handler1 = (req, res, next) => {
  console.log(Date.now());
  next();
}
app.use(handler1);

// 匿名函数格式:
app.use((req, res, next) => {
  console.log(Date.now());
  next();
});

中间件函数中有三个基本参数, req、res、[next]   

req就是请求相关的对象,它和下一个中间件函数中的req对象是一个对象   

res就是响应相关的对象,它和下一个中间件函数中的res对象是一个对象

next:它是一个函数,调用它将会跳出当前的中间件函数,执行后续中间件;如果不调用next,也不执行res.end,则整个请求都会在当前中间件卡住

const express = require('express')
const app = express();
app.use((req, res, next) => {
    console.log("第1个中间件");
    res.setHeader('content-type', 'text/html;charset=utf8');
    res.a1 = 100;  // 属于一个动作 res 里的东西会跟随这向下传递下面 顺序执行
    next();  // 向下继续进行 
});
app.use((req, res, next) => {
    console.log("第2个中间件");
    req.a2 = 200;
    next();    //
}); 
app.use((req, res, next) => { // 直接在这个位置结束 下面的就不要了 请求不到请求
    console.log("第3个中间件");
    req.a3 = 300;
    console.log(req.a1, req.a2)
    res.end('中间件');    /* 碰见 res.end 就结束了  没有 next或者没有res.end() 
他就会在请求的时候卡住 */
});
// 如果走到头 还是用 next() 这样会报错找不到地址 
app.listen(3000, () => {
    console.log('express应用在3000端口启动了');
})

中间件-匹配路由

路由匹配有四种模式

 1.app.use(中间件)是应用级中间件,所有的请求都能匹配。

2. app.use('/apiname',中间件) 。匹配请求路径是/apiname的请求。

3. app.get('/apiname',中间件) 。匹配get类型并且请求路径是/apiname的请求,就是我们前面说的路由。

4. app.post('/apiname',中间件1,中间件2) 。一个路由中使用多个中间件。

中间件的应用-访问日志

function getClientIp(req) {   // 虎丘
  return req.headers['x-forwarded-for'] ||
      req.connection.remoteAddress ||
      req.socket.remoteAddress ||
      req.connection.socket.remoteAddress;
}

app.use((req,res,next) => {
  console.log('我来用记录访问日志')
  // 获取当前用户访问的页面地址: req.url
  // 获取当前用户的id的地址: ?
  // 当前时间
  const dt = new Date()
  console.log('来自:', getClientIp(req));
  console.log('时间',dt.toLocaleTimeString())
  console.log('访问',req.url)
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Express.js是一个基于Node.js平台的Web应用开发框架,它提供了一系列的API,其中包括路由API。路由是用来定义应用的端点(URIs)以及如何响应客户端请求的。在Express.js中,路由由一个URI、HTTP请求方法和若干个处理函数组成。当客户端发送一个HTTP请求到服务器时,服务器会根据请求的URL和HTTP请求方法来选择相应的路由,并执行相应的处理函数来处理请求。 Express.js中定义路由的语法如下: ``` app.METHOD(PATH, HANDLER) ``` 其中,app是一个Express实例;METHOD是HTTP请求方法,比如GET、POST、PUT、DELETE等;PATH是服务器上的路径,可以是字符串、正则表达式或者一个数组;HANDLER是当路由匹配时执行的函数,可以是一个或多个回调函数。 例如,定义一个GET请求的路由: ``` app.get('/', function(req, res) { res.send('Hello World!'); }); ``` 这个路由匹配应用的根路径,并发送一个包含字符串'Hello World!'的响应到客户端。 除了基本的路由定义外,Express.js还提供了中间件(Middleware)机制,可以在路由处理函数前或后执行一系列的操作,比如记录日志、解析请求体、验证用户身份等。中间件函数可以在路由处理函数前后执行,可以是一个或多个函数,使用app.use()方法来添加中间件函数。 例如,定义一个日志中间件: ``` app.use(function(req, res, next) { console.log('Time:', Date.now()); next(); }); ``` 这个中间件会在每个请求到达服务器时打印出当前时间,并调用next()函数来继续执行下一个中间件或者路由处理函数。 总之,Express.js的路由工作方式是通过匹配请求的URL和HTTP请求方法来选择相应的路由,然后执行路由的处理函数来响应客户端请求。中间件可以在路由处理函数前后执行一些操作,比如日志记录、请求解析、身份验证等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值