【发布时间】:2013-11-25 12:38:10
【问题描述】:
我正在使用运行在节点上的 ember.js 开发一个应用程序。
现在,我必须调用一些外部 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基本认证错误。
我尝试了How to allow CORS? 和http://nthloop.com/blog/local-dev-with-nodejs-proxy/ 中建议的解决方案
但是,我无法从我的代码中检索到正确的响应。谁能指导我。
谢谢。
【问题讨论】:
-
使用 Jsonp 而不是 ajax。检查stackoverflow.com/questions/5943630/…
-
感谢 Damodaran.. 在我的 ajax 调用中添加 -- dataType: 'jsonp' 后,我就能够成功检索响应。感谢那。但是,现在我遇到了另一个奇怪的问题。第一次运行我的应用程序(网站)时,它要求我在页面加载时提供网络服务的用户名和密码。一旦我提供了有效的凭据,我就可以成功访问网站。如何删除此身份验证请求。换句话说,我在我的 ajax 调用中传递了这些凭据(用户名和密码)。为什么不影响?请提出建议。再次感谢。
标签: node.js ember.js express node-http-proxy