MarkLogic 7 REST API - 错误请求错误

时间:2014-03-26 08:43:51

标签: json angularjs rest marklogic

我正在使用AngularJS在MarkLogic 7 XML数据库之上构建一个webapp。我正在使用MarkLogic提供的REST API来访问数据库。我在控制器中使用的代码如下。

app.controller("mainController", function($scope, $http){
    var addr = 'http://localhost:8011/v1/search?q=test&options=newtest';
    $http({method:'GET', url: addr})
    .success(function(data){
    alert('Success');
        console.log(data);
});
});

现在,当我打开我的视图时,控制台中会记录一个“错误请求”错误。

OPTIONS http://localhost:8011/v1/search?q=test&options=newtest 400 (Bad Request)
angular.min.js:99
OPTIONS http://localhost:8011/v1/search?q=test&options=newtest No 'Access-Control-Allow-  
Origin' header is present on the requested resource. Origin 'null' is therefore not 
allowed access. angular.min.js:99
XMLHttpRequest cannot load http://localhost:8011/v1/search?q=test&options=newtest. No  
'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null'   
is therefore not allowed access. index.html:1

是否要在MarkLogic服务器上配置任何设置以使API可访问?请帮忙。

谢谢, 克里希纳

1 个答案:

答案 0 :(得分:4)

Krishna,是由MarkLogic托管的AngularJS代码,还是在node.js中运行它(也许是通过grunt)?这看起来像是跨站点脚本问题。我想到了两个解决方案:

  1. 如果您不需要中间层,MarkLogic可以托管Angular代码。将它放在端口8011上的应用服务器的模块数据库中。然后请求将转到JS来自同一个地方,问题就消失了。
  2. 如果要保留节点层,请设置代理。假设您正在使用Grunt,您可以看到我在具有相同堆栈的应用程序的Gruntfile.js中如何处理该问题。
  3. 一旦超过该错误,您可以考虑将与MarkLogic REST API的交互转移到服务中。我上面链接的Demo Cat应用程序有an early version of an MLRest AngularJS service;这可能是一个有用的起点。