101

Chrome の js コンソールや URL バーなどからのリクエストに対して機能する node.js のエクスプレス フレームワークで REST API を作成しました。ドメイン (CORS)。

JavaScript フロント エンドによって自動的に行われる最初のリクエストは /api/search?uri= に対するもので、「プリフライト」OPTIONS リクエストで失敗しているように見えます。

私の高速アプリでは、次を使用して CORS ヘッダーを追加しています。

var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');

    // intercept OPTIONS method
    if ('OPTIONS' == req.method) {
      res.send(200);
    }
    else {
      next();
    }
};

と:

app.configure(function () {
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(allowCrossDomain);
  app.use(express.static(path.join(application_root, "public")));
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

Chrome コンソールから、次のヘッダーを取得します。

リクエストURL:http://furious-night-5419.herokuapp.com/api/search?uri=http%3A%2F%2Flocalhost%3A5000%2Fcollections%2F1%2Fdocuments%2F1

依頼方法:OPTIONS

ステータスコード:200 OK

リクエスト ヘッダー

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, x-annotator-auth-token, accept
Access-Control-Request-Method:GET
Connection:keep-alive
Host:furious-night-5419.herokuapp.com
Origin:http://localhost:5000
Referer:http://localhost:5000/collections/1/documents/1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5

クエリ文字列パラメーター

uri:http://localhost:5000/collections/1/documents/1

応答ヘッダー

Allow:GET
Connection:keep-alive
Content-Length:3
Content-Type:text/html; charset=utf-8
X-Powered-By:Express

これは、API アプリケーションから適切なヘッダーが送信されていないように見えますか?

ありがとう。

4

6 に答える 6

66

クリーンな ExpressJS アプリでコードをチェックしましたが、問題なく動作します。

app.use(allowCrossDomain)configure 関数の先頭に移動してみてください。

于 2012-06-15T20:16:14.497 に答える
2

ここに画像の説明を入力

以下の手順に従います。

npm install cors --save

ルート js ファイル内:

 var express = require('express') 
 var cors = require('cors')
 var app = express()
 app.use(cors())
于 2020-09-10T18:19:30.657 に答える