2014-04-18 2 views
0

Я создал OData Конточка с узлом, с помощью модуля OData-сервера с помощью JayData таким образом:

require("odata-server"); 

$data.Entity.extend("Service", { 
    Id: {type: "id", key: true, computed: true, nullable: false}, 
    Name: {type: "string", nullable: false, maxLength: 50} 
}); 

$data.EntityContext.extend("marketplace", { 
    Services: {type: $data.EntitySet, elementType: Service} 
}); 

$data.createODataServer(marketplace, "/marketplace", 8081, "localhost"); 
console.log("Marketplace OData Endpoint created... Listening at 8081."); 

Тогда , все еще с узлом, я создал веб-приложение Express, которое получает некоторые команды через запрос GET, подключается к конечной точке OData (все еще используя JayData) и получает оттуда некоторые данные, а затем отправляет результат клиенту (в следующий код он просто отправляет 200), таким образом (путем определения маршрута):

require("jaydata"); 
... 
app.get("/addCompare/:id", function(req, res) { 
    console.log("Comparison request for: " + req.params.id); 
    $data.Entity.extend("Service", { 
    Id: {type: "id", key: true, computed: true, nullable: false}, 
    Name: {type: "string", nullable: false, maxLength: 50} 
    }); 
    $data.EntityContext.extend("marketplace", { 
    Services: {type: $data.EntitySet, elementType: Service} 
    }); 
    db = new marketplace("http://localhost:8081/marketplace"); 
    db.onReady(function() { 
    var arr = db.Services.filter(function(s) {return s.Name.startsWith("Serv");}).toArray(); 
    console.dir(arr); 
    }); 
    res.send(200); 
}); 

Проблема заключается в том, что когда я пытаюсь использовать этот код (используя этот запрос GET, например: http://www.localhost:8080/addCompare/NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5), я всегда получаю эту ошибку на сервере и после этого сбой. Вот ошибка:

TypeError: Value '$data.Object' not convertable to '$data.ObjectID' 
{ name: 'TypeError', 
    message: 'Value \'$data.Object\' not convertable to \'$data.ObjectID\'', 
    data: 
    { __metadata: 
     { type: 'Service', 
     id: 'http://localhost:8081/marketplace/Services(\'NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5\')', 
     uri: 'http://localhost:8081/marketplace/Services(\'NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5\')' }, 
    Id: 'NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5', 
    Name: 'Service51' } } 

Где я ошибаюсь? Спасибо ...

ответ

2

Как было описано в OData - Strange index with MongoDB [Mongoose: Cast Error], идентификатор - NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5 - должен быть декодирован на базе 64 (например, 5343fd656b9c5c084b8f2a70 - допустимый формат). Хотя декларация модели JayData верна, она будет переопределяться каждый раз, когда запрос поступает на ваш сервер. Вы можете улучшить текущую реализацию, переместив блоки $data.Entity.extend и $data.EntityContext.extend за пределы app.get - после require("jaydata");.

+0

Спасибо за ваши ответы Виктор. Не могли бы вы объяснить мне, как правильно выполнить декодирование? Я пытаюсь это сделать: 'db.Services.single (function (s) {return s.Id == this.id;}, {id: atob (req.params.id)}, function (s) {console. log (s);}); 'но я получаю тот же результат ошибки ... – Marco

Смежные вопросы