当前位置: 首页 > 面试题库 >

在Express中请求的钩子之前和之后(在任何req之前和任何res之后执行)

欧阳斌
2023-03-14
问题内容

ExpressJS中间件reqresnext有像钩子.on.pipe

但是我正在寻找app.getapp.post方法的挂钩。


问题答案:

app.use()和中间件可用于“ 之前
”,而'close'and
'finish'事件的组合可用于“
之后”


app.use(function (req, res, next) {
    function afterResponse() {
        res.removeListener('finish', afterResponse);
        res.removeListener('close', afterResponse);

        // action after response
    }

    res.on('finish', afterResponse);
    res.on('close', afterResponse);

    // action before request
    // eventually calling `next()`
});

app.use(app.router);

logger中间件就是一个例子,默认情况下,它将在响应后追加到日志中。

只需确保先使用此“ 中间件 ”即可,app.router因为顺序很重要。



 类似资料:
  • 我非常精通编码,但偶尔我会遇到似乎做基本相同事情的代码。我在这里的主要问题是,为什么你会使用 .() 而不是 ? 我一直在寻找,似乎找不到两者之间区别的明确定义,以及何时使用它们,何时不使用它们。 一个比另一个有什么好处,为什么我要使用一个而不是另一个??有人能给我解释一下吗?

  • 如果你希望在每次运行 Puppet 之前执行命令,可以在配置文件中使用 prerun_command 配置。 类似地,你也可以使用 postrun_command 配置运行 Puppet 之后需要执行的命令。 这种机制为 Puppet 与其他软件的集成提供了强大的钩子,甚至可以触发其他机器上的事件。 prerun 和 postrun 命令必须能成功运行(即其返回的状态码为 0),否则 Puppet

  • 请帮助理解ExecutorService#AwaitTermination(timeout)行为。 当我的代码中有: 在本例中,pool中的任务是否在同一线程中shutdownAndAwaitTermination()之后的任何其他调用之前完成? 看看在生产过程中发生的事情,我相信答案是否定的,但我只想了解如何确保在调用shutdownAndAwaitTermination()后放置的任何代码将在

  • 问题内容: 我目前有这个查询 我添加了一项新功能,可让您轻松导航到上一个或下一个项目。有没有一种简单的方法可以修改上面的查询,以便它提取上一行,当前行和下一行?还是仅执行另一个查询会更容易? 问题答案: 您可以使用子查询来获取previos和下一条记录的ID:

  • 问题内容: 有一种简单的方法可以在调用之前和之后调用JavaScript动作,例如,我想在后备bean中调用 之前 和 之后 调用JavaScript动作: 添加多个元素似乎不起作用(也许应该吗?!),例如 仅被调用。 问题答案: 使用属性。它必须指向一个回调函数引用(所以不要包括括号!): 实际的回调函数如下所示(JSF会自己提供参数):

  • 问题内容: 我很难理解将BEFORE和AFTER放在嵌套诺言之间的区别。 选择1: 选择2: 每个函数的行为如下,如果号码是test1的失败,如果号码是test2的失败,如果数量不TEST3失败。在这种情况下,test2仅失败。 我试图运行并使test2Async失败,然后在执行之前和之后都以相同的方式运行,并且未执行test3Async。有人可以向我解释在不同地方放置渔获物的主要区别吗? 在每个