Angular Http Module考虑过中间件?

时间:2017-02-09 11:51:13

标签: javascript angularjs node.js express middleware

我试图完全理解中间件是什么,我已经找到了一个难点。

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

我知道下一个变量不一定要标题为“next”才能拥有func。

我也知道中间件(如monogJs)和中间件函数/方法(app.use())之间存在差异。在角度上,http模块也遵循这种模式,角度和其他流行框架中的其他内容也是如此。这些也被认为是中间件吗?有人可以为我提供清晰度吗?

1 个答案:

答案 0 :(得分:1)

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

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

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 */
});

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