2016-11-15 3 views
1

Я прохожу через this sails tutorial от irl nathan и добрался до точки, где хотел попробовать использовать адаптер sails-orientdb (episode 10).Ошибка обновления Sails OrientDB

Я решил основные проблемы с «#» в идентификаторе orientdb, но я получаю сообщение об ошибке при выполнении обновления.

Ниже перечислены основные этапы кода.

Это страница редактирования, какие записи данных для обновления:

<form action="/user/update/<%= user.id.replace('#', '') %>" method="post" class="form-signin"> 
    <h2>Edit User</h2> 
    <input type="text" value="<%= user.name %>" name="name" class="form-control" /> 
    <input type="text" value="<%= user.title %>" name="title" class="form-control" /> 
    <input type="text" value="<%= user.email %>" name="email" class="form-control" /> 
    <input type="submit" value="Proceed" class="btn btn-lg btn-primary btn-block" /> 
    <!--input type="hidden" value="<%= user.id %>" name="ID" /--> 
    <input type="hidden" value="<%= _csrf %>" name="_csrf" /> 
</form> 

Форма тег выглядит в браузере:

<form action="/user/update/21:0" method="post" class="form-signin"> 

Функция обновления в контроллере это:

update: function (req, res, next) { 
console.log("*** Update ***"); 
    console.log(req.params.all()); 
    User.update(req.param('id'), req.params.all(), function userUpdated(err) { 
    console.log(err); 
    if (err) return res.redirect('/user/edit/' + req.param('id')); 
    return res.redirect('/user/show/' + req.param('id')); 
    });//user.update 
}//update 

Это консольный вывод:

*** Update *** 
{ name: 'Test User 1', 
    title: 'first ', 
    email: '[email protected]', 
    _csrf: 'irvf33GJ-CxCFmUSqmdR2WoU1K9Pw7-h8m4k', 
    id: '21:0' } 
Error (E_UNKNOWN) :: Encountered an unexpected error 
OrientDB.RequestError: Error parsing query: 
UPDATE user SET name = "Test User 1", title = "first ", email = "[email protected]", updatedAt =  date("2016-11-15 11:05:25.165", "yyyy-MM-dd HH:mm:ss.SSS", "UTC"), @rid = 21 RETURN AFTER WHERE @rid = "21:0" 

              ^
Encountered " <RECORD_ATTRIBUTE> "@rid "" at line 1, column 165. 
Was expecting one of: 
<TO> ... 
<VALUE> ... 
<VALUES> ... 
<SET> ... 
<ADD> ... 
[ a long list of expected values ] ... 

     DB name="sailsTest" 
    at child.Operation.parseError (C:\Development\node\sailsTestProject\sailsTestProject\node_modules\orientjs\lib\transport\binary\protocol33\operation.js:864:13) 
    at child.Operation.consume (C:\Development\node\sailsTestProject\sailsTestProject\node_modules\orientjs\lib\transport\binary\protocol33\operation.js:455:35) 
    at Connection.process (C:\Development\node\sailsTestProject\sailsTestProject\node_modules\orientjs\lib\transport\binary\connection.js:399:17) 
    at Connection.handleSocketData (C:\Development\node\sailsTestProject\sailsTestProject\node_modules\orientjs\lib\transport\binary\connection.js:290:20) 
    at emitOne (events.js:96:13) 
    at Socket.emit (events.js:188:7) 
    at readableAddChunk (_stream_readable.js:176:18) 
    at Socket.Readable.push (_stream_readable.js:134:10) 
    at TCP.onread (net.js:548:20) 

Details: OrientDB.RequestError: Error parsing query: 
UPDATE user SET name = "Test User 1", title = "first ", email = "[email protected]", updatedAt = date("2016-11-15 11:05:25.165", "yyyy-MM-dd HH:mm:ss.SSS", "UTC"), @rid = 21 RETURN AFTER WHERE @rid =  "21:0" 

              ^
Encountered " <RECORD_ATTRIBUTE> "@rid "" at line 1, column 165. 
Was expecting one of: 
<TO> ... 
<VALUE> ... 
<VALUES> ... 
<SET> ... 
<ADD> ... 
[ another long list of the same expected values ] ... 

    DB name="sailsTest" 

Оператор обновления сконструирован адаптером, и я не уверен, что происходит, чтобы вызвать ошибку.

Я пробовал другие HTTP-глаголы и предоставлял идентификатор в поле формы, но всегда получал ошибки. Я предполагаю, что существует проблема с тем, как идентификатор хранится в объекте params.

Что я могу сделать, чтобы это сработало?

ОБНОВЛЕНИЕ 22 Ноябрь 2016:

Для всех, кто может быть заинтересован я откат к различным версиям OrientDB, чтобы попробовать их.

Пока что OrientDB 2.0.18 работает.

Метод update работает при использовании OrientDB 2.1.25, но метод delete не выполнен.

+1

Правильный сгенерированный запрос должен быть UPDATE пользователем SET name = "Test User 1", title = "first", email = "[email protected]", updatedAt = date ("2016-11-15 11:05: 25.165 "," yyyy-MM-dd HH: mm: ss.SSS "," UTC ") RETURN AFTER WHERE @rid =" 21: 0 " –

+0

Спасибо Allessandro, инструкция обновления состоит из адаптера sails-orientdb, i не создали пользовательскую функцию. Я неправильно настроил адаптер или, возможно, неправильно установил параметры? –

+0

К сожалению, я должен был добавить @AlessandroRota к предыдущему комментарию :) –

ответ

2

(Для того, чтобы обернуть этот вопрос я отправляю свой ответ)

Я откат к OrientDB 2.0.18 и он работал.

У более поздних версий были проблемы.

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