2016-04-15 2 views
0

Problem: Ich arbeite an einer Android-App, die mit Nodejs REST-Server mit Knoten-Orm für MySQL-Backend interagiert. Auf meinem Server kann ich Benutzer anhand der E-Mail-Überprüfung authentifizieren. Sobald die Überprüfung erfolgreich ist, ruft der Knoten orm das Benutzerobjekt ab, ändert den überprüften Spaltenwert und speichert ihn zurück. Aber die Änderung spiegelt sich nicht in der db nach der Ausführung wider. Nur wenn wir den gleichen Code ein weiteres Mal ausgeführt wird, die mittlerweile in der DatenbankDatenbank Update Problem mit Node-orm2 für Mysql Backend

-Code

exports.activateEmail = function(email, callback) { 
    log.info('In verifyEmailDao.js, activateEmail module'); 
    var db = connectionObj.getConnection(); 
    var Candidate = db.models.jobseeker_id; 

    Candidate.find({email : email}, function(err,candidate){ 
    if(err){ 
     log.info('cannot find account with email to activate', email); 
     callback(false, null); 
    } 
    else { 
     candidate[0].verified = true; 
     log.info('candidate email now activated.! status is', candidate[0].verified); 
     candidate[0].save(function(error){ 
     log.info('Email verified any errors?', error); 
     callback(true, candidate[0].id); 
     }); 
     } 
    }); 
} 

Edit 1:

jobseeker_id.js (node-ORM-Modell)

var orm = require('orm'); 
module.exports = function(db){ 
    console.log('coming inside candidateId.js'); 
    var JobSeekerId = db.define('jobseeker_id', { 
    id : {type:'serial' , key:true}, 
    first_name : String, 
    last_name : String, 
    email : String, 
    password : String, 
    verified : Boolean 
    },{ 
    validations : { 
     email : orm.enforce.unique("Already registered") 
    } 
    }); 
} 

Serverprotokoll:

{"name":"test-app" "msg":"In verifyEmailDao.js, activateEmail module"} 
{"name":"test-app","msg":"candidate email now activated.! status is true"} 
{"name":"test-app","msg":"Email verified any errors? null"} 
{"name":"test-app","msg":"Email sucessfully activated. Now deleting the entry from verify email link table for candidate id 30} 
{"name":"test-app","msg":"In verifyEmailDao.js, deleteRandomLink module"} 
{"name":"test-app","msg":"error is---> null"} 
{"name":"test-app","msg":"Entry deleted from verify email table as email is activated"} 

Es gibt keine Änderungen im Protokoll, wenn ich den Code zum zweiten Mal ausführe, aber die Änderung in der Datenbank wird reflektiert!

+0

Vielleicht teilen Sie die db.models.jobseeker_id sowie die Ausgabe der Protokolle. – akaphenom

+0

yeah hat jetzt die Modelldatei und das Serverprotokoll hinzugefügt @akaphenom – Naresh

+0

Odd. Sie müssen wahrscheinlich ihren Code debuggen und sehen, was passiert. Von dem, woran ich mich erinnere, habe ich ihren Code nicht geliebt (es ist schon eine Weile her), aber ich würde wahrscheinlich so nah wie möglich an den Treiber denken und den Stapel wieder hocharbeiten. Es gibt entweder die Model- und/oder Instance-Objekte, die die Persistenzschicht abstrahieren - das Problem/die Antwort ist am wahrscheinlichsten darin - aber wie gesagt - sieh, ob die "Einfügungen" passieren und gehe den Stapel zurück – akaphenom

Antwort

0

Nach 2 Tagen der Hölle habe ich endlich das Problem behoben, indem ich eine Anweisung db.settings.set('instance.cache', false) in der DB-Konfigurationsdatei hinzugefügt. Obwohl ich nicht genau verstanden habe, wie das db update-Problem gelöst wurde, indem ich den Cache auf false gesetzt habe, hat das den Trick gemacht!