2016-11-15 9 views
1

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メソッドが失敗した場合に機能します。

+1

正しい生成されたクエリは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 " –

+0

ありがとうAllessandro、ありがとうございます、更新ステートメントは、sails-orientdbアダプター、カスタム関数を記述していません。アダプタを間違って設定したか、おそらくパラメータを間違って入力しましたか? –

+0

私は以前のコメントに@AlessandroRotaを追加していたはずです。 –

答えて

2

(この質問をラップするために私は自分の答えを投稿しています)

私は戻ってOrientDB 2.0.18に巻かれ、それが働きました。

以降のバージョンで問題が発生しました。