Javascript 考虑中间件的角度Http模块?

Javascript 考虑中间件的角度Http模块?,javascript,angularjs,node.js,express,middleware,Javascript,Angularjs,Node.js,Express,Middleware,我正试图完全理解什么是中间件,我已经有点难以理解了 我正在阅读expressJs文档及其对中间件功能的定义,即“中间件功能是可以访问请求对象(req)、响应对象(res)的功能,以及应用程序请求-响应周期中的下一个中间件函数。下一个中间件函数通常由名为next的变量表示。” 我知道下一个变量不必命名为“next”就可以得到func 我还知道中间件(比如monogJs)和中间件函数/方法(app.use())之间有区别。在angular中,http模块也遵循此模式,angular和其他流行框架中的

我正试图完全理解什么是中间件,我已经有点难以理解了

我正在阅读expressJs文档及其对中间件功能的定义,即“中间件功能是可以访问请求对象(req)、响应对象(res)的功能,以及应用程序请求-响应周期中的下一个中间件函数。下一个中间件函数通常由名为next的变量表示。”

我知道下一个变量不必命名为“next”就可以得到func


我还知道中间件(比如monogJs)和中间件函数/方法(app.use())之间有区别。在angular中,http模块也遵循此模式,angular和其他流行框架中的其他功能也是如此。这些也被认为是中间件吗?有人能为我澄清一下吗

中间件是在每个请求之前或之后执行的一段代码。这有助于创建共享功能,如日志记录和授权,而无需为每个端点实现代码

中间件的顺序通常称为中间件链

app.use(middleware)
这是我们将中间件附加到每个请求的方式。当涉及到数据库连接时,我们倾向于将其排除在请求端点之外,因为它是应用程序全局的

现在,我们下一步的目的是告诉链函数何时完成。这是一种回调模式。我们还希望能够提取链中的错误(异常),以便能够为应用程序添加共享功能。JavaScript不是类型定义的,所以我们唯一可以注册两个函数之间差异的方法是注册参数的数量。这就是为什么错误处理有4个参数

下面是一个具有日志记录和错误处理的端点示例

app.use(function(req, res, next) {
  console.log('request made to server');
  next();
});

app.use(function(error, req, res, next) {
  console.log('an error occurred in the code');
  next();
});

app.get('/', function(req, res) {
  /* Your logic here */
});
如果您有只希望用于少数端点的特定中间件,则可以直接注册它们

app.get('/', middleware, function(res, res) {
  /* Your logic here */
});

我希望这有助于理解中间件。中间件是处理堆栈的一部分,而不是协议调用

中间件是在每个请求之前或之后执行的一段代码。这有助于创建共享功能,如日志记录和授权,而无需为每个端点实现代码

中间件的顺序通常称为中间件链

app.use(middleware)
这是我们将中间件附加到每个请求的方式。当涉及到数据库连接时,我们倾向于将其排除在请求端点之外,因为它是应用程序全局的

现在,我们下一步的目的是告诉链函数何时完成。这是一种回调模式。我们还希望能够提取链中的错误(异常),以便能够为应用程序添加共享功能。JavaScript不是类型定义的,所以我们唯一可以注册两个函数之间差异的方法是注册参数的数量。这就是为什么错误处理有4个参数

下面是一个具有日志记录和错误处理的端点示例

app.use(function(req, res, next) {
  console.log('request made to server');
  next();
});

app.use(function(error, req, res, next) {
  console.log('an error occurred in the code');
  next();
});

app.get('/', function(req, res) {
  /* Your logic here */
});
如果您有只希望用于少数端点的特定中间件,则可以直接注册它们

app.get('/', middleware, function(res, res) {
  /* Your logic here */
});

我希望这有助于理解中间件。中间件是处理堆栈的一部分,而不是协议调用

不,中间件位于浏览器和http服务器之间不,中间件位于浏览器和http服务器之间嘿,谢谢!你提供了一个很好的解释,但我认为这就是我的困惑所在。angular中的http模块具有.then方法,使您能够以任何方式处理响应,类似于中间件。您甚至可以将其传递到另一个函数以继续处理。那么,是什么让中间件与众不同呢?Http是一种异步调用。因为从服务器获取响应需要n个时间。如果这在JavaScript中不可用,您的应用程序将在等待数据时冻结。看看承诺。也许能帮你理解这一切。嘿,谢谢!你提供了一个很好的解释,但我认为这就是我的困惑所在。angular中的http模块具有.then方法,使您能够以任何方式处理响应,类似于中间件。您甚至可以将其传递到另一个函数以继续处理。那么,是什么让中间件与众不同呢?Http是一种异步调用。因为从服务器获取响应需要n个时间。如果这在JavaScript中不可用,您的应用程序将在等待数据时冻结。看看承诺。可能会帮助你理解什么。然后就是一切。