Node.js Sequelize v4 |实例方法不起作用

Node.js Sequelize v4 |实例方法不起作用,node.js,sequelize.js,Node.js,Sequelize.js,我一直在尝试更新代码,以适应Sequelize的最新升级。我正在使用 续集:4.2.0 节点:7.10.0 净现值:5.0.3 问题 我似乎无法正确设置用户模型。我已经实现了一些似乎不起作用的实例方法。不能正确实例化该类 user.js module.exports = (sequelize, DataTypes) => { var User = sequelize.define('user', { attributes .... }, { hooks: {

我一直在尝试更新代码,以适应Sequelize的最新升级。我正在使用

  • 续集:4.2.0

  • 节点:7.10.0

  • 净现值:5.0.3

问题

我似乎无法正确设置用户模型。我已经实现了一些似乎不起作用的实例方法。不能正确实例化该类

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;
}
var sequelize;
sequelize = new Sequelize(config.DATABASE_URL);

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

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

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

function create_post_function = (req, res) => {
  var body = getBody();
  db.User.create(body).then(user => respondSuccess());
}
index.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;
}
var sequelize;
sequelize = new Sequelize(config.DATABASE_URL);

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

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

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

function create_post_function = (req, res) => {
  var body = getBody();
  db.User.create(body).then(user => respondSuccess());
}
usersController.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;
}
var sequelize;
sequelize = new Sequelize(config.DATABASE_URL);

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

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

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

function create_post_function = (req, res) => {
  var body = getBody();
  db.User.create(body).then(user => respondSuccess());
}
现在,除了实例方法外,本例中的所有内容都可以完美地工作

我不断得到
TypeError:无法设置未定义的属性“firstName”

出于某种原因,它没有将实例方法应用于sequelize模型。很奇怪,但我可能做了一些明显错误的事情,却没有看到


非常感谢您的帮助

您不能使用箭头函数,因为它们无法在适当的上下文中访问
(它将引用父范围)。试着这样写吧-

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

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

你刚刚救了我一天。谢谢我从未如此幸运地找到答案。我不知道你不能将
这个
与箭头函数一起使用。我会浪费太多时间往错误的方向看。实际上,你可以在箭头函数中使用“this”,但上下文将从父环境设置。