2016-11-15 30 views
1

我正在通過this sails tutorial由irl nathan,並得到了一個點,我想嘗試和使用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似乎工作。

當使用OrientDB 2.1.25但delete方法失敗時,update方法有效。

+1

正確生成的查詢應該是UPDATE用戶SET name =「測試用戶1」,title =「first」,email =「[email protected]」,updatedAt = date(「2016-11-15 11:05: 25.165「,」yyyy-MM-dd HH:mm:ss.SSS「,」UTC「)返回WHERE @rid =」21:0「後 –

+0

謝謝Allessandro,更新語句由sails-orientdb適配器組成,沒有寫入自定義函數。我是否配置了錯誤的適配器或可能提供了錯誤的參數? –

+0

哎呀,意識到我應該在以前的評論中添加@AlessandroRota :) –

回答

2

(爲了結束這一問題,我張貼我自己的答案)

我回滾到OrientDB 2.0.18和它的工作。

以後的版本有問題。