2013-08-03 51 views
2

我一直在尝试使用微风和OData一段时间。微风OData错误

我的OData来自另一台服务器,并启用CORS。我相信问题在于微风和odata,因为我已经使用breeze和web api测试了一切,并且它工作得很好。

在网络选项卡中铬我看到的OData正确获取,但由于某些原因没有显示数据,我得到这个奇怪的错误:

[Q] Unhandled rejection reasons (should be empty): 
[Error] 
q.js:891 
Error: OK Logger.js:52 


Here is my breeze DataService: 

app.adminMuscleGroup.dataService = (function(breeze, logger) { 



    breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true); 

    var service = new breeze.DataService({ 
     serviceName: "http://localhost:23758/odata/", 
     hasServerMetadata: false, 

    }); 

    breeze.config.initializeAdapterInstance("dataService", "OData"); 


    var manager = new breeze.EntityManager({ dataService: service }); 

    manager.enableSaveQueuing(true); 

    var dataService = { 
     getAll: getAll, 
    }; 

    return dataService; 

    function getAll() { 
     var query = breeze.EntityQuery.from("MuscleGroup").orderBy("Name"); 

     return manager.executeQuery(query); 
    } 

这里是Controller.js:

app.adminMuscleGroup.controller('AdminMuscleGroupCtrl', function ($scope) { 

    var dataService = window.app.adminMuscleGroup.dataService; 
    var logger = window.app.logger; 

    $scope.items = []; 

    $scope.getAllMuscleGroups = function() { 
     dataService.getAll() 
      .then(querySucceeded) 
      .fail(queryFailed); 
    }; 

    $scope.getAllMuscleGroups(); 

    function querySucceeded(data) { 
     $scope.items = []; 
     data.results.forEach(function(item) { 
      $scope.items.push(item); 
     }); 

     $scope.$apply(); 

     logger.info("Fetched all Muscle Groups"); 
    } 

    function queryFailed(error) { 
     logger.error(error.message, "Query failed"); 
    } 

}) 

这里是控制台日志截图:

enter image description here

+0

你可以显示你的logger.js文件吗? –

+0

当然,它与Breeze ToDo相同样本 – hyperN

+0

您可以调整您的查询并查看返回的内容 - return manager.executeQuery(query).fail(function(error){logger.error(error.message,'') ;}); - 我想看看是否有一个错误抛出,从查询 –

回答

2

我发现微风在OData和CORS中使用常规的EntitySetControllers时无法正常工作,您可以在question中看到我在这里提出的问题,为了让它们工作,控制器应该是一个常规的ApiController BreezeControllerAttribute从Breeze.WebApi。它可能已经被更新为可以工作,但我还没有尝试过。

1

通常,当我看到'应该是空的'时,这意味着承诺包含未处理的拒绝,其他未处理的错误,或承诺从未因某种原因返回。一般来说,当我有这个错误时,我确保console.log()拒绝原因或使用类似你正在使用的记录器。为此,您可以通过多种方式,但是这应该给你拒绝的理由,前提是你没有使用同步查询,如executeQueryLocally -

function getAll() { 
    var query = breeze.EntityQuery.from("MuscleGroup").orderBy("Name"); 

    // added a promise failure handler 
    return manager.executeQuery(query).fail(queryFailed); 
} 

,并添加以下到您的DataService或W/E

function queryFailed(error) { 
    var msg = 'Error retrieving data. ' + error.message; 
    logger.logError(msg, error, 'Data call', true); 
} 

编辑

好了,现在我们知道有些事情是会错了,当我们正在与数据的工作,让我们看看正在返回什么 -

编辑2

听起来就像是问题将需要Ward和周杰伦的神通 - 祝你好运!

0

你只需要添加这个额外的参数“DataServiceVersion,MaxDataServiceVersion”配置enableCors。 (新的EnableCorsAttribute(“”,“”,“*”,“DataServiceVersion,MaxDataServiceVersion”));