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
方法有效。
正確生成的查詢應該是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「後 –
謝謝Allessandro,更新語句由sails-orientdb適配器組成,沒有寫入自定義函數。我是否配置了錯誤的適配器或可能提供了錯誤的參數? –
哎呀,意識到我應該在以前的評論中添加@AlessandroRota :) –