我正在运行管理员注册和管理员数据检索react应用程序。注册工作正常,但检索管理员数据是粉碎我的后端。我遇到了这个错误时,调用给定的端点从我的react应用程序。但当我调用它从 Postman 它工作得很好。当我看到我的浏览器上的控制台我的react应用程序发送两个调用同时,而不是一个。在这些调用我的应用程序粉碎。如果有人能告诉我如何解决这个问题?对于backend = Node.js with express.js framework对于frontend = React
这是我遇到的错误
node:internal/errors:465
ErrorCaptureStackTrace(err);
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot remove headers after they are sent to the client
at new NodeError (node:internal/errors:372:5)
at ServerResponse.removeHeader (node:_http_outgoing:654:11)
at ServerResponse.send (C:\Users\Momentum\Documents\The Technologies\Madudi-App-Api\node_modules\express\lib\response.js:214:10)
at C:\Users\Momentum\Documents\The Technologies\Madudi-App-Api\api\index.js:22:72
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
code: 'ERR_HTTP_HEADERS_SENT'
}
[nodemon] app crashed - waiting for file changes before starting...
这就是我如何设置我的端点,并将数据更改为字符串,以获得简单的响应,但它崩溃
const makeHttpRequest = (controller, helper) => {
const makeRequest = (req, res) => {
try {
var data = "Trying response";
res.status(200).send({ status: true, data: data });
} catch (error) {
console.log(`ERROR: ${error.message}`);
res.status(400).send({ status: false, error: error.message });
}
};
return { makeRequest };
};
const makeApi = ({router, controller, helper}) => {
router.get("/test", (req, res) => res.send("Router is Woking..."));
router.get("/admin/get_all_admins", async (req, res) => res.send(await makeHttpRequest(controller, helper).makeRequest(req, res)));
}
module.exports = { makeApi }
这是我的react应用程序发出的呼叫
export default function GetAllUsers() {
useEffect(() =>{
try{
const response = axios.get('http://localhost:5000/admin/get_all_admins').then(async (response) => {
console.log('response ', response)
return response.data;
});
}catch(error) {
return [];
}
}, [])
3条答案
按热度按时间kmynzznz1#
我不熟悉这种响应请求的方法,但在我自己看来,当你发送多个响应时,你所面临的错误就会发生。
这可能是JavaScript的异步特性,从而导致在函数完成后发送另一个请求。
你还应该尝试返回响应,这样一旦完成,它就会从函数中取消。
r55awzrz2#
当您尝试为同一个传入请求发送多个响应时(这是不允许的),会发生此特定错误。
您正在为服务器上的同一个请求多次调用
res.send()
。第一种情况发生在
makeRequest()
函数中。第二次发生在这行代码中:
你不能这么做。每个传入的请求都有一个响应。所以,要么用
makeRquest()
发送响应,而不要在调用程序中发送。要么,不要用makeRequest()
发送响应,而只是返回响应应该是什么样的,让调用程序发送它。选择一个模型或另一个模型。vmdwslir3#
我不熟悉这种设置服务器的方式。看起来很奇怪。但是,在
router.get("/admin/get_all_admins"
中,你发送一个响应,它调用一个函数makeHttpRequest
,该函数也发送一个响应。因此,你会得到一个错误Cannot remove headers after they are sent to the client
,因为你发送了两次响应。