2017-06-26 5 views
2

Ich habe versucht, meinen Code zu aktualisieren, um die neuesten Upgrades von Sequelize zu unterstützen. Ich verwendeSequelize v4 | Instanzmethoden funktionieren nicht

  • Sequelize: 4.2.0

  • Knoten: 7.10.0

  • NPM: 5.0.3

Das Problem

Ich kann das Benutzermodell nicht korrekt einstellen. Ich habe einige Instanzmethoden implementiert, die scheinbar nicht funktionieren. Die Klasse darf nicht ordnungsgemäß instanziiert werden.

user.js

module.exports = (sequelize, DataTypes) => { 
    var User = sequelize.define('user', { 
    attributes .... 
    }, { 
    hooks: { 
     afterCreate(user, options) { 
     user.testFunction(); 
     } 
    } 
    }); 

    // Instance methods 
    User.prototype.testFunction =() => { 
    this.firstName = "John"; 
    } 

    // Class methods 
    User.anotherTestFunction =() => { 
    User.findOne().then(() => doSomething()); 
    } 

    return User; 
} 

index.js

var sequelize; 
sequelize = new Sequelize(config.DATABASE_URL); 

db.User = sequelize.import(__dirname + '/user.js'); 

db.sequelize = sequelize; 
db.Sequelize = Sequelize; 

module.exports = db; 

usersController.js

var db = require('../path/to/db'); 

function create_post_function = (req, res) => { 
    var body = getBody(); 
    db.User.create(body).then(user => respondSuccess()); 
} 

Nun, alles in diesem ex reichlich funktioniert perfekt außer der Instanz-Methode !!!

Ich bekomme ständig TypeError: Cannot set property 'firstName' of undefined

Aus irgendeinem Grund ist es nicht die Instanz Methode zum sequelize Modell anwenden. Sehr seltsam, aber ich mache wahrscheinlich etwas, das merkwürdig falsch ist und es nicht sieht.

Wirklich zu schätzen jede Hilfe!

Antwort

6

Sie können keine Pfeilfunktionen verwenden, da sie nicht auf this zugreifen können. Versuchen Sie, sie so zu schreiben -

// Instance methods 
User.prototype.testFunction = function testFunction() { 
    this.firstName = "John"; 
} 

// Class methods 
User.anotherTestFunction = function anotherTestFunction() { 
    User.findOne().then(() => doSomething()); 
} 
+0

Mein Gott. Du bist der Mann. Vielen Dank. – user3386826

Verwandte Themen