2016-05-27 18 views
0

Ich führe einen String-Verletzungsfehler mit meinem ORM, der mit dem Wert verbunden ist, der an die Eigenschaft authenticationToken in meiner Methode übergeben wird. Liegt das daran, dass ich die Methode zurückgebe? Der Wert, den ich sehen möchte, ist buf.toString('hex').JavaScript-Aufruf von String

.post(function(req, res, organization){ 

     function token() { 
      return crypto.randomBytes(20, function(err, buf){ 
       buf.toString('hex'); 
      }); 
     }; 

     models.Member.create({ 
      organizationId: req.body.organizationId, 
      memberEmail: req.body.addMember, 
     }).then(function(){ 

      return models.User.create({ 
       email: req.body.addMember, 
       authenticationToken: token() 
      }); 
     }).then(function(){ 
      console.log("Success"); 
      res.redirect('/app/settings/add-users'); 
     }) 
    }); 

Hier ist mein Fehler:

Unhandled rejection SequelizeValidationError: string violation: authenticationToken cannot be an array or an object 
+0

Also was ist 'token(). Buf'? – zerkms

+0

@zerkms Entschuldigung, ich habe es aktualisiert. Es sollte nur 'token()' sein – cphill

+0

Also 'token()' gibt ein Objekt zurück, daher erhalten Sie eine Ausnahme. Haben Sie die Dokumentation zu 'crypto.randomBytes' überprüft? – zerkms

Antwort

2

Könnte ein fehlen return Schlüsselwort sein? Die anonyme Funktion in Ihrem Anruf an crypto.randomBytes gibt nichts zurück.

+0

Und muss es irgendetwas zurückgeben? Was lässt dich so denken? – zerkms

+0

nach [Lesen der Dokumente] (https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback) würde ich sagen. In diesem Fall ist es möglicherweise besser, die 'token' -Eigenschaft direkt auf' crypto.randomBytes (20) .toString ('hex') 'zu setzen, da sie scheinbar nicht asynchron auftreten muss. –

+1

Genau :-) ... – zerkms