中间件与路由处理器

路由处理器和中间件的参数中都有回调函数,这个函数有2个3个或4个参数。
如果有2个或3个参数,前两个参数是请求和响应对象,第三个参数是next函数。
如果有4个参数,它就变成了错误处理中间件,第一个参数变成了错误对象,然后依次是请求、响应和next对象。
如果不调用next(),管道就会被终止,也不会再有处理器或中间件做后续处理,此时应该发送一个响应到客户端。

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

let i=1;

app.use(function(req, res, next){

console.log(‘\nALLWAYS‘+i++);

next();

});

app.use(function(req, res, next){

console.log(‘SOMETIMES‘);

next();

});

//错误处理中间件

app.use(function(err, req, res, next){

console.log(‘unhandled error detected: ‘ + err.message);

res.send(‘500 - server error‘);

});

app.use(function(req, res){

console.log(‘route not handled‘);

res.send(‘404 - not found‘);

});

app.listen(3000, function(){

console.log(‘listening on 3000‘);

});

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

let i=1;

app.use(function(req, res, next){

console.log(‘\nALLWAYS‘+i++);

next();

});

app.get(‘/a‘, function(req, res){

console.log(‘/a: route terminated‘);

res.send(‘a‘);

});

app.get(‘/a‘, function(req, res){

console.log(‘/a: never called‘);

});

app.use(function(req, res, next){

console.log(‘SOMETIMES‘);

next();

});

//错误处理中间件

app.use(function(err, req, res, next){

console.log(‘unhandled error detected: ‘ + err.message);

res.send(‘500 - server error‘);

});

app.use(function(req, res){

console.log(‘route not handled‘);

res.send(‘404 - not found‘);

});

app.listen(3000, function(){

console.log(‘listening on 3000‘);

});

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

let i=1;

app.use(function(req, res, next){

console.log(‘\nALLWAYS‘+i++);

next();

});

app.get(‘/b‘, function(req, res, next){

console.log(‘/b: route not terminated‘);

next();

});

app.use(function(req, res, next){

console.log(‘SOMETIMES‘);

next();

});

app.get(‘/b‘, function(req, res, next){

console.log(‘/b (part 2): error thrown‘ );

throw new Error(‘b failed‘);

});

app.use(‘/b‘, function(err, req, res, next){

console.log(‘/b error detected and passed on‘);

next(err);

});

//错误处理中间件

app.use(function(err, req, res, next){

console.log(‘unhandled error detected: ‘ + err.message);

res.send(‘500 - server error‘);

});

app.use(function(req, res){

console.log(‘route not handled‘);

res.send(‘404 - not found‘);

});

app.listen(3000, function(){

console.log(‘listening on 3000‘);

});

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

let i=1;

app.use(function(req, res, next){

console.log(‘\nALLWAYS‘+i++);

next();

});

app.use(function(req, res, next){

console.log(‘SOMETIMES‘);

next();

});

app.get(‘/c‘, function(err, req){

console.log(‘/c: error thrown‘);

throw new Error(‘c failed‘);

});

app.use(‘/c‘, function(err, req, res, next){

console.log(‘/c: error deteccted but not passed on‘);

next();

});

//错误处理中间件

app.use(function(err, req, res, next){

console.log(‘unhandled error detected: ‘ + err.message);

res.send(‘500 - server error‘);

});

app.use(function(req, res){

console.log(‘route not handled‘);

res.send(‘404 - not found‘);

});

app.listen(3000, function(){

console.log(‘listening on 3000‘);

});

时间: 2024-10-04 15:47:35

中间件与路由处理器的相关文章

express中间件和路由教程

一.路由1.通常HTTP URL的格式是这样的:http://host[:port][path] http表示协议. host表示主机. port为端口,可选字段,不提供时默认为80. path指定请求资源的URI(Uniform Resource Identifier,统一资源定位符),如果URL中没有给出path,一般会默认成"/"(通常由浏览器或其它HTTP客户端完成补充上). 所谓路由,就是如何处理HTTP请求中的路径部分.比如"http://xxx.com:80/u

以中间件,路由,跨进程事件的姿势使用WebSocket

通过参考koa中间件,socket.io远程事件调用,以一种新的姿势来使用WebSocket. 浏览器端 浏览器端使用WebSocket很简单 // Create WebSocket connection. const socket = new WebSocket('ws://localhost:8080'); // Connection opened socket.addEventListener('open', function (event) { socket.send('Hello Se

中间件和上下文处理器、djangoAdmin

中间件 中间件代码放到python任意的地方,能找到导入就行,这里放到app里 创建middleware.py文件,中间件的两种方法 #一个中间件是一个可调用的对象,接受一个request,返回一个请求 #第一种:一个中间件可以是一个函数 #实现功能:利用中间件实现:只有谷歌浏览器才让访问 通过user_agent区分 from django.http import HttpResponseForbidden def simple_middleware(get_response):#参数必须是g

Node.js开发入门—Express里的路由和中间件

我们已经基于Express写了HelloWorld示例,还使用express generator工具创建了一个HelloExpress项目,但有一些代码一直没有好好解释,这是因为它们牵涉到路由和中间件等概念,三言两语说不清楚,所以我专门用一篇文章来讲路由和中间件. 路由 通常HTTP URL的格式是这样的: http://host[:port][path] http表示协议. host表示主机. port为端口,可选字段,不提供时默认为80. path指定请求资源的URI(Uniform Res

body-parser Node.js(Express) HTTP请求体解析中间件

body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日     781     声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包含请求体,Node.js 原生HTTP模块中,请求体要基于流的方式接收和解析.body-parser是一个HTTP请求体解析中间件,使用这个模块可以解析JSON.Raw.文本.URL-encoded格式的请求体,Express框架中就是使用这个模块做为请求体解析中间件. 请求体解析 1.1 原生环境

asp.net core 3.x Endpoint终结点路由1-基本介绍和使用

前言 我是从.net 4.5直接跳到.net core 3.x的,感觉asp.net这套东西最初是从4.5中的owin形成的.目前官方文档重点是讲路由,没有特别说明与传统路由的区别,本篇主要介绍终结点路由的相关概念和如何使用,不会详细介绍路由,这个参考官方文档就ok了.如果将来有机会研究到底层再深度剖析. 参考:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/routing?view=aspnetcore-3.1https://

CCNP路由实验之十六 策略路由(PBR)

?? 策略路由(PBR)是一种比基于目标网络进行路由更加灵活的数据包路由转发机制.路由器将通过路由图决定如何对需要路由的数据包进行处理,路由图决定了一个数据包的下一跳转发路由器.在路由器转发一个数据报文时,首先根据配置的规则对报文进行过滤,匹配成功则按照一定的转发策略进行报文转发.这种规则可以是基于标准和扩展访问控制列表,也可以基于报文的长度:而转发策略则是控制报文按照指定的策略路由表进行转发,也可以修改报文的IP优先字段,策略路由也可以在一定程度上实现流量工程,使不同服务质量的流或者不同性质的

路由配置命令

router> enable                    从用户模式进入特权模式router# disable or exit           从特权模式退出到用户模式router# show sessions             查看本机上的TELNET会话router# disconnect                关闭所有的TELNET会话router# show users                查看本机上的用户router# erase startup-

ASP.NET Core - 中间件与管道(1)

今天来讨论一个ASP.NET Core 很重要概念管道和中间件,在ASP.NET Core中,针对HTTP请求采用pipeline也就是通常说的管道方式来处理,而管道容器内可以挂载很多中间件(处理逻辑)“串联”来处理HTTP请求,每一个中间件都有权决定是否需要执行下一个中间件,或者直接做出响应.这样的机制使得HTTP请求能够很好的被层层处理和控制,并且层次清晰处理起来甚是方便. 示意图如下: 为了再次说明管道和中间件的概念,举一个官方给出的权限验证的例子,中间件A,B分别按顺序挂载在管道容器中,