Я создал демо-версию с использованием JavaScript для API поиска фотографий Flickr. Теперь я конвертирую его в AngularJs. Я искал в Интернете и нашел ниже конфигурацию.
Конфигурация:
myApp.config(function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
});
Услуги:
myApp.service('dataService', function($http) {
delete $http.defaults.headers.common['X-Requested-With'];
this.flickrPhotoSearch = function() {
return $http({
method: 'GET',
url: 'http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=3f807259749363aaa29c76012fa93945&tags=india&format=json&callback=?',
dataType: 'jsonp',
headers: {'Authorization': 'Token token=xxxxYYYYZzzz'}
});
}
});
Контроллер:
myApp.controller('flickrController', function($scope, dataService) {
$scope.data = null;
dataService.flickrPhotoSearch().then(function(dataResponse) {
$scope.data = dataResponse;
console.log($scope.data);
});
});
Но все-таки я получил ту же ошибку. Вот некоторые ссылки, которые я пробовал:
XMLHttpRequest не может загрузить URL. Происхождение не разрешено Access-Control-Allow-Origin
http://samurails.com/tutorial/cors-with-angular-js-and-sinatra/
EDIT:
Я создал прокси-сервер в node.js по предложению @Quentin:
var http = require('http');
var url = require('url');
var fs = require('fs');
var server;
server = http.createServer(function (req, res) {
// your normal server code
var path = url.parse(req.url).pathname;
fs.readFile(__dirname + path, function (err, data) {
if (err) {
return send404(res);
}
res.writeHead(200, {'Content-Type':path == 'json.js' ? 'text/javascript' : 'text/html'});
res.write(data, 'utf8');
res.end();
});
}),
server.listen(8001);
//using express to load customizes static files
var express = require("express"),
app = express();
app.all("/api/*", function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
res.header("Access-Control-Allow-Methods", "GET, PUT, POST");
return next();
});
app.use("/js", express.static(__dirname + '/js'));
app.listen(3001);
Финальное редактирование
Я удалил заголовок авторизации
headers: {'Authorization': 'Token token=xxxxYYYYZzzz'}
и он работает нормально. У меня есть то, что я хотел. Спасибо всем за участие в этом вопросе