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

标签 node.js sequelize.js

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

  • Sequelize :4.2.0

  • Node :7.10.0

  • NPM: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;
}

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());
}

现在,除了实例方法之外,这个例子中的一切都完美无缺!!!

我不断收到 TypeError: Cannot set property 'firstName' of undefined

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

非常感谢任何帮助!

最佳答案

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

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

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

关于node.js - Sequelize v4 |实例方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44751996/

相关文章:

node.js - 为什么我的异步代码在 Controller 中有效,而在模型中无效?

node.js - 在同构 Redux 应用程序中,保持 API 调用较小还是一次性发送所有信息是更好的做法吗?

mysql - 如果仅提供值,则检查唯一性 sequelize

javascript - 无法对此特定服务进行 SOAP 调用, "undefined"目标命名空间

javascript - AngularJS 字符串不是函数

node.js - 使用 express.js 在响应 header 中设置 token 值

mongodb - node.js 身份验证与 Sequelize 和 Passport - promise 和回调混淆

node.js - Google Storage 不是构造函数错误

javascript - Supertest + Restify gzip响应文件上传

node.js - 属于很多关联添加外键到源模型,SequelizeDatabaseError : column "CategoryID" does not exist