NodeJS MailParser中的JSON.parse意外结束输入错误

时间:2017-01-26 11:31:45

标签: javascript json node.js

我在NodeJS child_process中执行代码。 我使用了Andris9的MailParser。 我使用console.log(JSON.stringify({obj:mail_object}));将mail_object的数据传递给父级。

在父母中,我有这段代码JSON.parse(retVal);。 出现的错误是"意外结束输入"。 此错误仅在我收到的电子邮件附件时显示。 如果电子邮件没有附件,则没有错误。

这是父方法,

getEmails(){
    let workerProcess = child_process.spawn('node', [basePath+'imports/workers/retrieveEmail.js']);
    workerProcess.stdout.on('data', function (data) {
        try{
            let retVal = new Buffer(data).toString();
            retVal = JSON.parse(retVal);
            console.log(retVal);
            if(typeof retVal.err == "undefined"){
                console.log(retVal.obj.from[0].address);
                Fiber(function () {
                    var objs = [];
                    if (typeof retVal.obj.attachments !== "undefined") {
                        console.log("Test passed");
                        retVal.obj.attachments.forEach(function (attachment) {
                            let future = new Future();

                            Fiber(function () {
                                Files.write(attachment.content, {
                                    fileName: attachment.fileName,
                                    type: attachment.contentType
                                }, function (error, fileRef) {
                                    if (error) {
                                        future.throw(new Meteor.Error(500, error.message));
                                    } else {
                                        ...
                                    }
                                });
                            }).run();
                            var bool = true;
                            if (bool = future.wait())
                                objs.push(bool);
                        });
                    }
                    ...
                }).run();
            }else{
                console.log(retVal.err);
            }
        }catch(e){
            console.log(e);
        }
    });
    workerProcess.stderr.on('data', function (data) {
        console.log('stderr: ' + data);
    });

    workerProcess.on('close', function (code) {
        console.log('child process exited with code ' + code);
    });
},

我删除了一些不必要的代码。 这是我的retrieveEmail.js,

...
    client.on("retr", function (status, msgnumber, data, rawdata) {
        if (status === true) {
            var mailparser = new MailParser({
                streamAttachments: false
            });
            var timeStamp = Math.floor(Date.now());
            mailparser.on("attachment", function (attachment, mail) {
                console.log(JSON.stringify({err:"testpassed1"}));
            });
            mailparser.on("end", function (mail_object) {
                console.log(JSON.stringify({err:"testpassed2"}));
                console.log(JSON.stringify({obj:mail_object}));
            });
            mailparser.write(data);
            mailparser.end();
            client.dele(msgnumber);
        } else {
            console.log("RETR failed for msgnumber " + msgnumber);
            client.quit();
        }
    });
...

0 个答案:

没有答案