irl nathanによってthis sails tutorialに行き、sails-orientdbアダプター(episode 10)を試してみたかったところまで行きました。帆OrientDBの更新エラー
orientdb idの '#'の基本的な問題を解決しましたが、アップデートを実行するときにエラーが発生しました。
ここにコードの重要な部分があります。
これは、データが更新するポスト編集ページです:
<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タグがブラウザで次のようになります。
<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動詞を試してIDをフォームフィールドに入力しましたが、常にエラーが発生します。 IDがparamsオブジェクトに格納される方法に問題があると思います。
私はそれを動作させるために何ができますか?
UPDATE 2016年11月22日:私はそれらを試して戻って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: @ 25165 "、" yyyy-MM-dd HH:mm:ss.SSS "、" UTC ")@rid =" 21:0 " –
ありがとうAllessandro、ありがとうございます、更新ステートメントは、sails-orientdbアダプター、カスタム関数を記述していません。アダプタを間違って設定したか、おそらくパラメータを間違って入力しましたか? –
私は以前のコメントに@AlessandroRotaを追加していたはずです。 –