PDFを生成するためのノードモジュールに次のヘルパーコードがあります。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;
このヘルパーを使用して、pdf を電子メールの添付ファイルとして送信します。
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 は、私が含めたもう 1 つのヘルパーです。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;
});
};