2016-11-15 3 views
1

Ich gehe durch this sails tutorial von Irl Nathan und kam zu einem Punkt, wo ich versuchen wollte, und verwenden Sie die Segel-Orientdb-Adapter (episode 10).Sails OrientDB Update Fehler

Ich habe die grundlegenden Probleme mit dem '#' in Orientdb IDs gelöst, aber ich bekomme einen Fehler beim Ausführen eines Updates.

Hier sind die wichtigsten Teile des Codes.

Dies ist die Edit-Seite, die die Daten Beiträge zu aktualisieren:

<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> 

Das Formular-Tag wie folgt im Browser aussieht:

<form action="/user/update/21:0" method="post" class="form-signin"> 

Die Update-Funktion in der Steuerung ist dies:

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 

Dies ist die Ausgabe der Konsole:

*** 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" 

Die Update-Anweisung wird vom Adapter erstellt, und ich bin mir nicht sicher, was passiert, um den Fehler zu verursachen.

Ich habe versucht, andere HTTP-Verben und die ID in einem Formularfeld, aber immer erhalten Fehler. Ich vermute, dass es ein Problem mit der Art und Weise gibt, wie die ID im params-Objekt gespeichert wird.

Was kann ich tun, damit es funktioniert?

UPDATE 22. November 2016:

Für alle, die interessiert sein könnte ich wieder in verschiedenen Versionen von Orientdb rollte sie auszuprobieren.

Bis jetzt scheint OrientDB 2.0.18 zu funktionieren. Die Methode update funktioniert, wenn OrientDB 2.1.25 verwendet wird, die Methode delete jedoch fehlgeschlagen ist

+1

Die korrekte generierte Abfrage sollte UPDATE Benutzer sein SET name = "Test Benutzer 1", title = "zuerst", email = "[email protected]", updatedAt = Datum ("2016-11-15 11:05: 25.165 "," JJJJ-MM-TT HH: mm: ss.SSS "," UTC ") RÜCKKEHR NACH WHERE @ rid =" 21: 0 " –

+0

Danke Allessandro, die Update-Anweisung besteht aus dem Adapter sails-orientedd, d habe keine benutzerdefinierte Funktion geschrieben. Habe ich den Adapter falsch konfiguriert oder die Parameter falsch eingegeben? –

+0

Hoppla, ich sollte @AlessandroRota zum vorherigen Kommentar hinzugefügt haben :) –

Antwort

2

(Um diese Frage zu einpacken ich meine eigene Antwort bin Entsendung)

ich Orientdb rollte zurück 2.0.18 und es funktionierte.

Spätere Versionen hatten Probleme.