【问题标题】:Error in sending response while using node-imap?使用 node-imap 时发送响应时出错?
【发布时间】:2020-10-10 09:37:39
【问题描述】:

我正在使用 imap 对服务器进行用户身份验证。我将 express 用于服务器,https://github.com/mscdex/node-imap 用于 imap。 控制器功能

exports.authenticateUser = async (req, res) => {

        let username = req.body.username;
        let password = req.body.password;
        let imap = new Imap({
            user: username,
            password: password,
            host: HOST_ADDRESS,
            port: HOST_PORT
        })

        imap.once('ready', (e) => {
            req.session.user = username;
            return res.status(201).json({
                success: true,
                user: username
            });
        })

        imap.once('error', function (err) {
            console.log("err", err);    
            return res.status(500).json({
                success: false,
                error: 'Wrong credentials'
            });
        });

        imap.connect();
}

但我的服务器经常停止

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

线路出现错误的原因

                return res.status(500).json({
                success: false,
                error: 'Wrong credentials'
            });

【问题讨论】:

  • 嗨 Nimish,您找到任何解决方案吗?我面临完全相同的问题,并且无法在特定情况下重现它。我已经针对 NPM 存储库打开了缺陷以寻求帮助。
  • @Rajjy 你能检查一下结束连接是否有帮助吗?

标签: node.js imap node-imap


【解决方案1】:

如何改变这个

return res.status(500).json({
                success: false,
                error: 'Wrong credentials'
            });

到这里

 res.status(500).send({success: false,
                    error: 'Wrong credentials'
                });

  res.status(201).send({
        success: true,
        user: username
    });

【讨论】:

    【解决方案2】:

    要解决,

        imap.once('ready', (e) => {
            req.session.user = username;
            imap.end()
            return res.status(201).json({
                success: true,
                user: username
            });
        })
    

    我使用 IMAP 进行身份验证,因此我无需保持连接处于活动状态,因此我在验证凭据后立即结束。它解决了这个问题。

    我猜可能会发生什么,在发送响应 201 之后,在连接终止的某个时间后,触发错误,导致再次发送响应,从而导致错误。只是猜测。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-09
      • 2021-03-10
      • 1970-01-01
      • 2016-12-09
      • 2020-03-24
      • 2016-04-15
      • 2011-03-20
      • 2013-01-27
      相关资源
      最近更新 更多