freeCodeCamp/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/implement-a-root-level-requ...

3.1 KiB
Raw Blame History

id title localeTitle challengeType
587d7fb1367417b2b2512bf3 Implement a Root-Level Request Logger Middleware 实现根级请求记录器中间件 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动词都有类似的方法GETDELETEPUT...)。

Instructions

构建一个简单的记录器。对于每个请求,它应该在控制台中登录一个字符串,采用以下格式: method path - ip 。示例如下: GET /json - ::ffff:127.0.0.1 。请注意, methodpath之间有一个空格,并且破折号分隔pathip被两侧的空格包围。您可以使用req.method req.pathreq.ip从请求对象获取请求方法http谓词相对路由路径和调用者的ip。记得在完成后调用next() ,否则你的服务器将永远停留。确保打开“日志”,并查看某些请求到达时会发生什么... 提示Express按照它们在代码中出现的顺序评估函数。中间件也是如此。如果您希望它适用于所有路由则应在它们之前安装它。

Tests

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

// solution required