Angular Http Module被认为是中间件?
Posted
技术标签:
【中文标题】Angular Http Module被认为是中间件?【英文标题】:Angular Http Module considered middleware? 【发布时间】:2017-06-27 10:05:42 【问题描述】:我试图完全理解什么是中间件,但我遇到了一个难题。
我正在阅读 expressJs 文档及其对中间件函数的定义,即“中间件函数是可以访问请求对象 (req)、响应对象 (res) 和下一个中间件函数的函数应用程序的请求-响应周期。下一个中间件函数通常由名为 next 的变量表示。
我知道下一个变量不必将其命名为“下一个”以具有函数。
我也知道中间件(如 monogJs)和中间件函数/方法(app.use())之间是有区别的。在 Angular 中,http 模块也遵循这种模式,Angular 和其他流行框架中的其他东西也是如此。这些是否也被视为中间件?有人可以为我澄清一下吗?
【问题讨论】:
不,中间件在浏览器和http服务器之间 【参考方案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 */
);
我希望这有助于理解中间件。中间件是处理堆栈的一部分,而不是协议调用。
【讨论】:
嘿,谢谢!你提供了一个很好的解释,但我认为这就是我的困惑所在。 angular 中的 http 模块具有 .then 方法,使您能够以任何您喜欢的方式处理响应,类似于中间件。您甚至可以将其传递给另一个函数以继续处理。那么是什么让中间件与众不同呢? Http 是一个异步调用。因为从服务器获得响应需要 n 时间。如果这在 JavaScript 中不可用,您的应用程序将在等待数据时冻结。看看 Promises。可能会帮助您了解 .then 的全部含义。以上是关于Angular Http Module被认为是中间件?的主要内容,如果未能解决你的问题,请参考以下文章
#私藏项目实操分享# 如何解决 Angular custom library module 在 ng build 时无法被识别的错误