【问题标题】:http-proxy-middleware econnreset error after successful post request成功发布请求后的 http-proxy-middleware econnreset 错误
【发布时间】:2020-12-13 09:30:34
【问题描述】:

按照本教程https://www.youtube.com/watch?v=o3eR0X91Ogs 使用 Nodejs/Express 和 create-react-app 开发联系表单。我遇到的问题是,当我在表单上点击提交时,消息成功,并且我在收件箱中收到了它。但是,在开发人员控制台中,我在位于 Contact.js 中的axios.post 上设置了超时错误,并在我的终端中记录了message sent,控制台日志位于 index.js 中,立即抛出以下错误之后:

HPM ERROR: Error: socket hang up
[1]     at connResetException (internal/errors.js:612:14)
[1]     at Socket.socketCloseListener (_http_client.js:443:25)
[1]     at Socket.emit (events.js:326:22)
[1]     at TCP.<anonymous> (net.js:673:12) {
[1]   code: 'ECONNRESET'
[1] }
[1] [HPM] Error occurred while trying to proxy request /api/contact/ from localhost:3001 to http://localhost:3000/ (ECONNRESET) (https://nodejs.org/api/errors.html#errors_common_system_errors)

有谁知道为什么会出现这个错误,我该如何解决?消息发送但随后挂起,这会阻止应用程序状态重置 (resetForm)。同时,Contact.js 中的axios.post 不会将sent 的状态更新为true。

The Github repo for the project.

编辑:我已经坚持了几天了。查看了类似的问题,尝试了我能找到的所有修复程序,但这个错误仍然存​​在。

【问题讨论】:

    标签: javascript node.js reactjs axios smtp


    【解决方案1】:

    这是关于 ExpressJs 响应如何工作的常见误解。如果您不发送对请求的响应,它将永远被卡住。因此,您所要做的就是发送响应!此外,res 变量在sendMail 函数的回调中重新定义。这是修复:

      app.post('/api/contact', (req, res) => {
      // ...
      smtpTransport.sendMail(mailOptions, (err, mailResponse) => {
        if(err) {
          console.log(err);
        } else {
          console.log('Message sent!');
        }
        smtpTransport.close();
        return res.send(err ? err : 'Message sent!');
      });
    

    【讨论】:

    • 谢谢,贾法尔,这绝对有帮助。我完全错过了在sendMail 的回调中重新定义res 并且我没有意识到Express 需要响应。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多