【问题标题】:Express js middleware on app level应用级别的 Express js 中间件
【发布时间】:2015-09-11 21:20:37
【问题描述】:

我正在使用 expressJs 并希望在每个结束时执行一些中间件 请求。

是否可以在应用程序级别定义它以避免定义它 在每条路线上?

【问题讨论】:

标签: node.js express


【解决方案1】:

检查这个例子。代码“console.log('Response sent')”将在对任何路由的每个请求结束时执行。

var express    = require('express');
var app        = express();

function myMiddleware (req, res, next) {
    res.on('finish', function() {
        console.log('Response sent.');
    });
    next();
}

app.use(myMiddleware);

app.get('/first', function(req, res, next) {
    console.log('[/first] New request recieved.');
    res.end('Hi!');
});

app.get('/second', function(req, res, next) {
    console.log('[/second] New request recieved.');
    res.end('Hi!');
});

app.listen(3000, function(req, res) {
    console.log('Listening port 3000');
});

【讨论】:

  • THX,就是这样。
【解决方案2】:

您可以为此使用app.use([path,] function [, function...])

这里有一个来自 Express'docs 的示例:

// this middleware will be executed for every request to the app
app.use(function (req, res, next) {
  console.log('Time: %d', Date.now());
  next();
})

当然,您可以在别处定义一个函数并将其传递给use 方法。

function middleware(req, res, next) {
  console.log('middleware!');
  next();
}

// some other codes maybe

app.use(middleware);

【讨论】:

  • 感谢您的回答,但是您的代码正在注册要表达的中间件,而不会在每个请求结束时被调用。为了让它以正确的方式执行,你必须像上面的答案一样在一个快速钩子中注册它。
  • 也谢谢你,我跳过了顶部和底部,因为无论如何你都要放它们。使用var app = express(); 初始化您的应用程序后,您只需放置中间件即可。在上述答案之上,我试图证明您可以在任何地方定义中间件并将其作为参数传递。我希望现在更清楚一点。
  • 啊,好吧,是的,我知道这一点,并且我已经在使用在任何地方声明的中间件。但对于所有其他人来说,这是一个非常好的提示。它允许您通过以可维护、模块化和可重用的方式构建我们的代码来保持文件干净。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2018-01-02
  • 2023-03-29
相关资源
最近更新 更多