NodeJS从处理程序重定向

v1l68za4  于 2022-12-18  发布在  Node.js
关注(0)|答案(1)|浏览(140)

我们需要从一个日志处理程序直接,这个处理程序是从一个路由调用的,我尝试了很多方法,这是最新的,更有意义,但似乎仍然不工作。我想无论如何,如果它被调用,这个直接总是发生。

router.get('/AccessDenied', utils.CheckAuthenticated, function(req,res) {
    try {
      let ContentTitle = "Abcd1234"
    } catch (error) {
      CustomErrorLog(error, metadata)
    }
})

自定义错误日志函数为:

const logger = require("../services/logger")
const uuid = require("uuid");

module.exports = {
    CustomErrorLog: (error, metadata) => {
        return (req, res, next) => {
            let correlationId = uuid.v4()
            metadata["correlation_id"] = correlationId;
            logger.error(error, metadata);
            res.redirect('/error/' + errorId)
        }
    }
}

我尝试了许多不同的方法,似乎都不起作用。任何帮助都很感激。

qoefvg9y

qoefvg9y1#

看起来您正尝试将CustomErrorLog函数用作中间件函数,但没有为此正确设置。中间件函数使用三个参数调用:req、res和next。您的CustomErrorLog函数缺少next参数,并且也不返回中间件函数。
要解决此问题,您可以更新CustomErrorLog函数以接受三个参数并返回中间件函数:

module.exports = {
    CustomErrorLog: (error, metadata) => {
        return (req, res, next) => {
            let correlationId = uuid.v4()
            metadata["correlation_id"] = correlationId;
            logger.error(error, metadata);
            res.redirect('/error/' + errorId)
        }
    }
}

然后,您可以将CustomErrorLog函数用作路由中的中间件,如下所示:

router.get('/AccessDenied', utils.CheckAuthenticated, function(req,res) {
    try {
      let ContentTitle = "Abcd1234"
    } catch (error) {
      CustomErrorLog(error, metadata)(req, res, next)
    }
})

这将确保使用正确的参数调用CustomErrorLog函数,并确保它的行为与中间件函数相同。

相关问题