繁体   English   中英

Nodejs端点连接超时

[英]Nodejs endpoint connection timeout

我在节点中创建了一个端点,当从一个简单的html页面调用它时,它会发送一封电子邮件。 一切都按预期工作,我可以点击按钮发送电子邮件,但是当我走出本地网络时,事情就会出错。

我可以使用apache服务器访问所有页面,但无论何时按下电子邮件按钮,我都面临ERR_CONNECTION_TIMED_OUT ,我似乎无法弄清楚原因。

我已经设置了我的路由器以将进入端口8080的所有流量转发到apache服务器,并且所有流量进入端口8081到端点/sendMail

托管页面的服务器位于一组iptables规则后面,但我已经将规则设置为空规则集,无济于事

以供参考,

在mail.js

let bodyParser = require('body-parser');
let multer = require('multer');
let cors = require('cors');
let url  = require('url');
let express = require('express');
let app = express();
let nodemailer = require('nodemailer');
let fs = require('fs');

app.use(cors());
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
//app.use(multer());

/**
 *
 * Function to hopefully send an email :)
 */

app.post("/sendMail", function (req, res) {
    console.log("HERE");
    let transporter = nodemailer.createTransport({
       service: 'gmail',
        auth: {
            user: 'bodycentralprintingsite@gmail.com',
            pass: 'b0dyCenTral!'
        }
    });

    let mailOptions = {
        from: 'bodycentralprintingsite@gmail.com',
        to:   'justinbng36@gmail.com',
        subject: 'New Order ' + new Date(),
        text:    'Order recieved',
        attachments: [
            {
                path: req.body.image
            }
        ]
   };
   transporter.sendMail(mailOptions, function(error, info) {
        if (error) {
           console.log(error);
        } else {
            console.log('Email sent: ' + info.response);
        }
    });
});

app.listen(8081);

clientside.js

$('#Submit').click(function(){
    console.log("HERE");
    html2canvas(document.querySelector("#Submit")).then(canvas => {
        $.ajax({
        type: 'POST',
//        url: 'http://192.168.1.23:8080/sendMail',
        url: 'http://68.228.250.168:8081/sendMail',
        data: canvas ,
        contentType: "application/json; charset=utf-8",
        success: function(resultData) {console.log('done')}
        });
    });
});

编辑:托管网页的服务器还负责启动运行mail.js的节点服务器。 但是当将url作为clientside.js的内部IP(在注释掉的url行中)时,我仍然面临超时错误

您正在抽出时间,因为在电子邮件成功后您没有向客户发送回复。 所以客户端一直等待响应,直到达到超时限制。

尝试更改此行:

console.log('Email sent: ' + info.response);

对此:

res.status(200).json(info.response)

另外id建议在错误处理程序中添加res.status(500).json(error)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM