ノード上で実行されている ember.js を使用してアプリケーションを開発しています。
ここで、いくつかの外部 Web サービスを呼び出し、それに応じて (Web サービスの応答に基づいて) ホームページを作成する必要があります。
- これらの Web サービスは、外部サーバー (別のドメイン) で実行されています。現在、ローカル環境から Web サイトを実行しています。
- 認証:有効な資格情報を提供した後でのみ、ユーザーはこれらの Web サービスにアクセスできます。つまり、ブラウザからこの Web サービスにアクセスしようとすると、最初にユーザー名とパスワードの入力を求められます。これらの資格情報が有効な場合 (サーバー側の検証)、応答 json が返されます。
私のapp.jsコードは次のとおりです。
var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
ホームページのコード (簡単にするために、すべてのビューを削除し、ページの読み込み時に外部 Web サービスを呼び出すだけです)
<html>
<head>
<title>Lets think..</title>
<script src="./javascripts/libs/handlebars-1.0.0.js"></script>
<script src="./javascripts/libs/jquery-1.9.1.js"></script>
<script src="./javascripts/libs/ember-1.1.2.js"></script>
<script>
window.App = Ember.Application.create();
</script>
<script>
$(window).load(function(){
$.ajax({
type: 'GET',
url: 'http://vpn.domain_name.com/myServer/WebService/json/getInfo',
data: {username: "user_name",password: "my_password"},
success: function (data) {
console.log('sucess');
},
failure: function(error){
console.log('error');
}
});
});
</script>
</head>
<body>
</body>
</html>
上記のように、ブラウザーから (資格情報の検証後) 以下の Web サービス ( http://vpn.domain_name.com/myServer/WebService/json/getInfo ) に正常にアクセスできました。
ただし、コードからアクセスしようとすると、次のエラーが表示されます: Firebug によるデバッグ時:
"NetworkError: 401 Unauthorized - http://vpn.domain_name.com/myServer/WebService/json/getInfo?username=user_name&password=my_password"
Google Chromeコンソールを介したデバッグ時:
XMLHttpRequest cannot load http://vpn.domain_name.com/myServer/WebService/json/getInfo?username=user_name&password=my_password. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.
上記のエラーがクロス ドメイン アクセスによるものなのか、http 基本認証エラーによるものなのかはわかりません。
CORS を許可する方法で提案されているソリューションを試してみました。およびhttp://nthloop.com/blog/local-dev-with-nodejs-proxy/
ただし、コードから適切な応答を取得できませんでした。誰でもこれについて私を案内してもらえますか。
ありがとうございました。