静的なAngularJS Webサイトと異なるドメインで動作するExpressサーバーがあります。サイトは、ファイル名をパラメータとしてGET要求をサーバーに送信します。次に、サーバーはS3バケットからファイルを要求し、S3バケットは「バイナリ/オクテットストリーム」を「Content-Type」として送信します。データを解読し、同じ「Content-Type」でサイトに送り返し、ファイルをダウンロードします。これはすべて単一のファイル要求に対してはうまくいきますが、サーバーに一度にファイル名の配列を送信し、複数のファイルをダウンロードできるようにしたいと考えています。 JSON配列としてファイル名を送信しようとしましたが、エラーが発生します。Express ServerへのJSON配列データを使用したAngularJS POST要求
XMLHttpRequestはhttp://localhost:3000/decryptをロードできません。プリフライト要求への応答がアクセス制御チェックを通過しない:要求されたリソースに「アクセス制御許可」がない。 Origin 'file://'はアクセスが許可されていません。
私のサーバーコンソールでは、要求はPOSTの代わりにOPTIONSとして表示されます。私はAccess-Control-Allow-Origin: *
を私の応答ヘッダーに必ず含めています。これを解決するにはどうすればいいですか?
UPDATE:
私は私のルータ上で次のミドルウェアを追加することにより、CORSのエラーを解決することができた:
function allowCrossDomain(req, res, next) {
if ('OPTIONS' == req.method) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
res.status(200).end();
}
else {
next();
}
}
しかし、私はまだのために(複数を送信するかどうかはわかりません各ファイル)の "バイナリ/オクテットストリーム"をレスポンスに追加し、静的サイトのファイルとしてダウンロードします。現在、私はangular-file-saverを使用して、単一の要求からファイルを保存しています。
Expressサーバでミドルウェアとして[body-parser'](https://npmjs.com/package/body-parser)を使用していますか?これはCORSの問題には影響しませんが、あなたは 'req 'を実行します。あなたの要求は 'Content-Type = application/json'の構文解析方法が分からないため、空のままです。 – peteb
はい。私のサーバのjavascriptファイルのスニペットを以下に示します: 'app.use(logger( 'dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended:false})); app.use(cookieParser()); – wshaheer