2013-08-03 69 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」));