按照本教程https://www.youtube.com/watch?v=o3eR0X91Ogs,使用Nodejs/Express和create-react-app开发联系人表单。我遇到的问题是,当我点击表单上的提交时,邮件会成功,并且我会在我的收件箱中得到它。然而,在开发人员控制台中,我遇到了我在Contact.js中的axios.post
上设置的超时错误,在我的终端中,它记录了位于index.js中的message sent
,控制台日志,随后立即抛出了以下错误:
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.
编辑:我已经坚持了几天了。查看了类似的问题,尝试了我能找到的所有修复方法,但此错误仍然存在。
发布于 2020-08-29 07:15:00
这是对ExpressJs响应如何工作的一个常见误解。如果你不对请求发送响应,它将永远被卡住。所以你所要做的就是发送一个响应!此外,在sendMail
函数的回调中重新定义了res
变量。修复方法如下:
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!');
});
https://stackoverflow.com/questions/63566162
复制相似问题