2017-01-21 16 views
1

私のNode.jsサーバー・コードがAWSインスタンス上で実行されています。私は私のラップトップ上のブラウザでアプリケーションを実行している場合は、ポート3000で実行されているのNode.jsサーバーにPUT呼び出しを行うことイオン2 Appを使用していますNode.jsサーバーがクロス・ソース要求をブロックしました

var express = require('express'); 
 
var http = require('http'); 
 
var bodyParser = require('body-parser'); 
 
var logger = require('morgan'); 
 
var cors = require('cors'); 
 
var SuperLogin = require('superlogin'); 
 
    
 
var app = express(); 
 
app.set('port', process.env.PORT || 3000); 
 
app.use(logger('dev')); 
 
app.use(bodyParser.json()); 
 
app.use(bodyParser.urlencoded({ extended: false })); 
 
app.use(cors()); 
 
    
 
app.use(function(req, res, next) { 
 
    res.header("Access-Control-Allow-Origin", "*"); 
 
    res.header('Access-Control-Allow-Methods', 'DELETE, PUT'); 
 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
 
    next(); 
 
}); 
 
    
 
var config = { 
 
    dbServer: { 
 
    protocol: 'http://', 
 
    host: 'localhost:5984', 
 
    user: '', 
 
    password: '', 
 
    userDB: 'sl-users', 
 
    couchAuthDB: '_users' 
 
    }, 
 
    mailer: { 
 
    fromEmail: '[email protected]', 
 
    options: { 
 
     service: 'Gmail', 
 
     auth: { 
 
      user: '[email protected]', 
 
      pass: 'userpass' 
 
     } 
 
    } 
 
    }, 
 
    security: { 
 
    maxFailedLogins: 3, 
 
    lockoutTime: 600, 
 
    tokenLife: 86400, 
 
    loginOnRegistration: true, 
 
    }, 
 
    userDBs: { 
 
    defaultDBs: { 
 
     private: ['supertest'] 
 
    } 
 
    }, 
 
    providers: { 
 
    local: true 
 
    } 
 
} 
 
    
 
// Initialize SuperLogin 
 
var superlogin = new SuperLogin(config); 
 
    
 
// Mount SuperLogin's routes to our app 
 
app.use('/auth', superlogin.router); 
 
    
 
app.listen(app.get('port')); 
 
console.log("App listening on " + app.get('port'));

:それはこのようになります私の知る限り、サーバーコードを伝えることができるよう

Cross-Origin Request Blocked: The Same Origin Policy disallows reading 
the remote resource at http://ec2-xx-xxx-xx-4xx.eu-central-1.compute.amazonaws.com/auth/login. 
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing). 

すべての起源を許可するように設定されているが、私はそれにもかかわらず、このエラーを取得しています:PUTコールがCORSエラーを与える(ionic serveを使用)。

+0

あなたはアクセス制御 - 許可 - メソッドに 'OPTIONS'を追加しようとしましたか? https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests –

+0

を参照してください。PUTを使用すると、OPTIONSリクエストでPUTリクエストをプリフライトするブラウザが起動します。そのため、PUTリクエストに加えて、サーバーでOPTIONSリクエストをサポートし、OPTIONSリクエストを受け取ったときに適切な情報を返す必要があります。注:リクエストの他の条件によってもOPTIONSのプリフライトがトリガされるので、CORSを動作させたい場合は、常にサポートすることをお勧めします。 – jfriend00

+0

OPTIONSの処理方法を追加する方法がわかりません。私が使用しているコードは、既存のノードパッケージです。 –

答えて

3

これは、プリフライトがトリガーされたためです。これは、OPTIONSリクエストがサーバーに到着することを意味します。これはあなたの質問へのコメントの@johannes merzによって指摘された this description by MDNでよく説明されています。あなたのサーバがこのような担当者に何かでそれを受け入れることを指示することができ

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header('Access-Control-Allow-Methods', 'DELETE, PUT'); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    if ('OPTIONS' == req.method) { 
     res.sendStatus(200); 
    } 
    else { 
     next(); 
    }}); 
+0

これはfabファブです!ありがとう。 –

関連する問題