gpt4 book ai didi

javascript - 当我链接/嵌套中间件时,出现错误

转载 作者:行者123 更新时间:2023-12-02 22:27:13 24 4
gpt4 key购买 nike

我正在尝试在另一个中间件中运行一个中间件。当我调用嵌套中间件时,出现错误:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

这是我的代码:

// middleware1
module.exports = function(req, res, next) {
req.user = 'current user';
next();
};

// middleware2
module.exports = function(req, res, next) {
middleware1(req, res, next);
if (req.user !== 'current user') return res.status(403).send('Access denied');
next();
};


// API
router.get('/api', middleware2, async (req, res) => {
return res.send(req.user);
});

我做错了什么,将一个中间件链接或嵌套到另一个中间件中的正确方法是什么?

(网络应用程序还有更多内容,但我只包含了重现错误所需的内容)

最佳答案

关注 @jknotek 评论:

由于您将 next 函数从 middleware2 传递到 middleware1,因此您面临最终中间件在调用堆栈部分被调用的风险,这会触发 res.send。然后它在 middleware2 中继续,它尝试执行 res.status,但会失败。

您想要将中间件链接为:

router.get('/api', middleware1, middleware2, [...])

或者你希望你的中间件2的行为有点像:

//middleware2
module.exports = function(req, res, next) {
middleware1(req, res, () =>
if (req.user !== 'current user') return res.status(403).send('Access denied');
next();
);
};

关于javascript - 当我链接/嵌套中间件时,出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59022765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com