节点模块+ PDF助手 - 我做错了什么?

时间:2013-09-29 21:06:18

标签: javascript node.js express

我在节点模块中有以下帮助代码用于生成pdfs。它使用pdfCrowd API和Restler。

var rest = require( "restler" );
var create = function() {

    this.pdfConfig = { 
        // data object for generating the pdf
    };

    this.getRaw = function( cb ) {
        this.fetch(function( err, result ) {
            if ( err ) return cb( err );
            cb( null, new Buffer( result.raw ).toString( "base64" ));
        });
    };

    this.fetch = function( cb ) {
        rest.post( "https://pdfcrowd.com/api/pdf/convert/html/", { data: this.pdfConfig })
        .on("success", function( err, result ) {
            if ( err ) return cb( err );
            cb( null, result );
        });
    };

};
module.exports.create = create;

我使用此帮助程序将pdfs作为电子邮件附件发送出去。

var Pdf = require( "/helpers/pdf" ),

function sendPdfEmail() {
    var pdf = new Pdf.create();
    pdf.pdfConfig = { ... }
    pdf.getRaw(function( err, pdfData ) {
       sendEmail( from, to, subject, body, pdfData );
    });
}

麻烦的是,我了解到在竞争条件下,很多人都在调用sendPdfEmail(),我可能会得到别人的PDF。也就是说,传递了正确的电子邮件 - 但附件中的数据可能属于其他人。

任何想法我做错了什么?

编辑:根据要求,这里有关于sendEmail的更多详细信息。

sendEmail是我包含的另一个助手。它是node-postmark模块的包装器。

   var sendEmail = function( from, to, subject, body, attachment, cb ) {

        var postmark = require( "postmark" )( api_key );
        postmark.send({
            "From": from,
            "To": to,
            "Subject": subject,
            "HtmlBody": body,
            "Attachments": attachment ? [{
              "Content": attachment,
              "Name": "stuff.pdf",
              "ContentType": "application/pdf"
            }] : null
        }, function( err, success ) {
            if ( typeof cb === "function" ) cb();
            postmark = null;
        });

    };

0 个答案:

没有答案