Я прохожу через 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
не выполнен.
Правильный сгенерированный запрос должен быть 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 " –
Спасибо Allessandro, инструкция обновления состоит из адаптера sails-orientdb, i не создали пользовательскую функцию. Я неправильно настроил адаптер или, возможно, неправильно установил параметры? –
К сожалению, я должен был добавить @AlessandroRota к предыдущему комментарию :) –