--- id: 587d7fb1367417b2b2512bf3 title: Implement a Root-Level Request Logger Middleware localeTitle: 实现根级请求记录器中间件 challengeType: 2 --- ## Description
在我们介绍express.static()中间件函数之前。现在是时候更详细地看看中间件是什么了。中间件函数是带有3个参数的函数:请求对象,响应对象和应用程序请求 - 响应周期中的下一个函数。这些函数执行一些可能对应用程序产生副作用的代码,并且通常会向请求或响应对象添加信息。当满足某些条件时,它们还可以结束发送响应的循环。如果他们没有发送响应,当他们完成时,他们开始执行堆栈中的下一个函数。触发调用第三个参数next()快递文档中的更多信息。 查看以下示例:
function(req, res, next) {
console.log("I'm a middleware...");
next();
}
假设我们在路线上安装了此功能。当请求与路由匹配时,它会显示字符串“我是中间件......”。然后它执行堆栈中的下一个函数。 在本练习中,我们将构建一个根级中间件。正如我们在挑战4中所见,要在根级别安装中间件功能,我们可以使用方法app.use(<mware-function>) 。在这种情况下,将对所有请求执行该功能,但您也可以设置更具体的条件。例如,如果您希望仅为POST请求执行某个函数,则可以使用app.post(<mware-function>) 。所有http动词都有类似的方法(GET,DELETE,PUT,...)。
## Instructions
构建一个简单的记录器。对于每个请求,它应该在控制台中登录一个字符串,采用以下格式: method path - ip 。示例如下: GET /json - ::ffff:127.0.0.1 。请注意, methodpath之间有一个空格,并且破折号分隔pathip被两侧的空格包围。您可以使用req.methodreq.pathreq.ip从请求对象获取请求方法(http谓词),相对路由路径和调用者的ip。记得在完成后调用next() ,否则你的服务器将永远停留。确保打开“日志”,并查看某些请求到达时会发生什么... 提示:Express按照它们在代码中出现的顺序评估函数。中间件也是如此。如果您希望它适用于所有路由,则应在它们之前安装它。
## Tests
```yml tests: - text: 根级别记录器中间件应该是活动的 testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/root-middleware-logger'').then(data => { assert.isTrue(data.passed, ''root-level logger is not working as expected''); }, xhr => { throw new Error(xhr.responseText); })' ```
## Challenge Seed
## Solution
```js // solution required ```