2017-02-09 53 views
0

我试图完全理解中间件是什么,我已经到了一个硬点。Angular Http模块考虑中间件?

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

我知道下一个变量不必被命名为“下一个”来获得func。

我也知道中间件(如monogJs)和中间件函数/方法(app.use())之间是有区别的。在角度上,http模块也遵循这种模式,就像角度和其他流行框架中的其他事情一样。这些也被认为是中间件吗?有人能为我提供清晰吗?

+0

不,中间件位于浏览器和http服务器之间 – Sebas

回答

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

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

+0

嘿谢谢!你提供了一个很好的解释,但我认为这是我的困惑所在。 http中的angular模块具有.then方法,可以让您以任何方式处理响应,类似于中间件。您甚至可以将它传递给另一个函数以供继续处理。那么,什么使中间件不同? – Scott

+0

Http是一个异步调用。因为从服务器获取响应需要花费n个时间。如果在JavaScript中不可用,则您的应用程序在等待数据时会冻结。看看Promises。可能会帮助你理解什么是关键。 –