1

私はこれで迷っていることを知るのに十分なほど読んでいます。他のスレッドの解決策は役に立たないようです。

apps .samedomain.com の Node サイトで mandrill API を呼び出すページ.samedomain.comにページがあります。ORM を使用すると、テーブル ルートを介して問題なく書き込むことができます。テーブルが書き込まれ、ページが確認を受け取った後、メール ルートに送信されるはずです。ローカルで実行すると、どちらも正常に動作します。展開すると...

XMLHttpRequest はhttp://apps.samedomain.com/.../.../mail/4847775376401843を読み込めません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン ' http://pages.samedomain.com ' へのアクセスは許可されません。応答の HTTP ステータス コードは 502 でした。

私のapp.jsには...

var cors = require('cors');
app.use(cors());

私のルートファイルには...

module.exports = function(appRouter) {    

var mandrill = require('mandrill-api/mandrill');
var mandrill_client = new mandrill.Mandrill(process.env.MANDRILL_API_KEY);    

appRouter.route('/.../mail/:first_list_id').post(function(req,res){

    req.models.know_me_2016
        .find({list_id:req.params.first_list_id})
        .run(function(err, results){
            if (err) { 
                res.send(err); 
            } else {
                var template_content = [{
                    "recipient": <stuff> ,
                    "content": <stuff>
                }];
                var message = {
                    <mandrill message object stuff>
                };
            }

            mandrill_client.messages.sendTemplate({
                "template_name": <template-name>, 
                "template_content": template_content, 
                "message": message}, function(result) {
                    console.log(result);

                    //I tried adding header stuff but it didn't help, maybe in wrong place? I thought CORS library was going to take care of this part?

                    res.header("Access-Control-Allow-Origin", "http://interactives.dallasnews.com");
                    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

                    //It sends successfully when run local
                    res.send("Email sent successfully");
                }, function(e) {
                    // Mandrill returns the error as an object with name and message keys
                    console.log('A mandrill error occurred: ' + e.name + ' - ' + e.message);
                    // A mandrill error occurred: Unknown_Subaccount - No subaccount exists with the id 'customer-123'
            });
        });        
    });
}

Mandrill キーは、すべての IP を受け入れるように設定されています。

任意の洞察をいただければ幸いです。

4

2 に答える 2

0

cors を初期化するときに、許可されたオリジンをホワイト リストに追加する必要があります。

var whitelist = [
    'http://samedomain.com',
    'http://apps.samedomain.com',
    'http://pages.samedomain.com'
    // list whatever possible domains you have
]
var globalCorsOptions = {
    origin: function(origin, callback) {             
        callback(null, whitelist.indexOf(origin) !== -1);
    }
};

var cors = require('cors');
app.use(cors(globalCorsOptions));
于 2016-02-02T18:59:14.470 に答える
0

この特定のケースでは、更新された .env ファイルがないことが問題の原因であることがわかりました。プライベート git は .env ファイルを無視するため、資格情報は投稿されませんでした。Mandrill は接続できませんでした。Mandrill 資格情報が挿入され、.env リモートが更新されると、期待どおりに動作し始めました。

于 2016-02-03T19:18:08.913 に答える