【问题标题】:Problem with two send responses: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client两个发送响应的问题:错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头
【发布时间】:2019-12-09 15:23:09
【问题描述】:

我尝试创建一个小型“数据库”,我可以在其中将一些数据放入输入字段并进行查询。例如,当我在字段中输入姓名并单击请求按钮时,它将显示有关该人的信息。 它工作得很好,并且在没有找到任何东西时会显示一条消息。但是我总是得到标题中提到的错误,我不明白是什么问题。

server.post('/MyWebApp/mydatabase1', function(req, res){        
    database.forEach(element => {
        if(element.email == req.body.email || element.nachname == req.body.nachname || element.vorname == req.body.vorname)
            res.send(element);
    });
    res.send("No Entry found");
});

首先我想检查是否有任何元素匹配,如果是则应该res.send(element); 如果不是res.send("No Entry found"); 虽然我得到了那个错误,但它仍然有效

'错误 [ERR_HTTP_HEADERS_SENT]: 发送后无法设置标头 给客户”

可能是因为我做了两个发送响应? 我该如何解决?

【问题讨论】:

    标签: javascript jquery node.js ajax server


    【解决方案1】:

    发生这种情况是因为您在回调函数之外发送 - 这总是会发生(res.send 不像 return - 它不会终止函数)。

    您似乎也在尝试发回多个元素。您要么正在寻找一个元素,要么正在发回一组匹配的元素 - 但你不能一次将它们发回一个(想想这方面的客户端方面)。

    如果您打算返回所有匹配项,您的代码看起来有点像这样:

    server.post('/MyWebApp/mydatabase1', function(req, res) {        
        let elements = database.filter(element => element.email == req.body.email || element.nachname == req.body.nachname || element.vorname == req.body.vorname);
        if(elements.length) {
            res.send(elements);
        }
        else {
            res.send("No Entry found");
        }
    });
    

    如果您只打算进行一次匹配,您可以随时返回 elements[0](如果存在)。

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 2018-09-19
      • 2023-01-19
      • 2020-09-22
      • 2021-02-26
      • 2021-08-20
      • 2019-09-28
      • 2019-12-25
      相关资源
      最近更新 更多