javascript - 如何使用 Sequelize 和 Promise 自定义函数来播种数据文件?

标签 javascript node.js sequelize.js bcrypt

我正在尝试在 NodeJS 中使用 Sequelize,并使用他们的 Seeders CLI 尝试向bulkInsert 命令添加查询。我创建了一个简单的 JS 函数,每次运行sequelize 迁移命令时,它都会返回空值错误。我还尝试执行 beforeCreate 方法,但我不确定为什么错误表明该函数不存在。这是我需要代码帮助的内容。

passGen.js

const bcrypt = require('bcrypt');

// https://github.com/kelektiv/node.bcrypt.js

function BpassGen(password){
    bcrypt.hash(password, 15, function(err, hash) {
        return hash;
      });
}

exports.BpassGen = BpassGen;

然后是我的种子文件

'use strict';
const PassGenX = require('../helpers/passwordGeneration');
var sequelize = require('sequelize');
const uuidV1 = require('uuid/v1');
const Accounts = require('../models/accounts');

const uuidT = uuidV1();

var password = PassGenX.BpassGen('secretConfig');

module.exports = {
  up: (queryInterface, Sequelize) => {

   // ERROR: Accounts.beforeCreate is not a function
   Accounts.beforeCreate((Accounts, options) => {
      return PassGenX.BpassGen('secretConfig').then(hashedPw => {
        Accounts.password = hashedPw;
      });
    });

   return queryInterface.bulkInsert('Accounts', [
    {
      uid: uuidT,
      userName: 'NaniMae1',
      firstName: 'Nani',
      lastName: 'Mae',
      dateOfBirth: new Date(),
      email: 'yaya@gmail.com',
      backupEmail: 'dsf@gmail.com',
      phoneNumber: null,
      phoneNumberStatus: 1,
      twoFactorEnabled: 1,
      imageURL: null,
      passwordHash: '',
      passwordKey: '',
      securityStamp: '',
      userLimit: 10,
      createdAt: new Date(),
      updatedAt: new Date(),
      Id_dataValidity: 1,
      Id_status: 1,
      Id_accountRole: 1,
      Id_inviteKey: 1,
      Id_privacy: 2
    }
], {});
  },

  down: (queryInterface, Sequelize) => {

  }
};

我还尝试添加密码字段来调用该函数,但结果仍然为 null:

password: PassGenX.BpassGen('secretKey'),

我想做的是也许我需要添加一个 promise ?我该怎么做呢? 我认为会发生的是我的辅助函数将被调用,然后密码字段将具有 bcrypt 哈希,但这并没有发生。在 CLI 中,我只是收到相同的错误“密码不接受空值”,因为在我的模型(sequelize 迁移定义)中,null 字段为 false,因此它不能为空。

如何使用我的帮助函数生成一个密码,该密码在我的 Seeder 文件中用于在 Sequelize 中创建帐户?

编辑: 如何在我的帐户模型 js 和帐户迁移 js 文件中实现这样的 Hook ,例如直接方法? sequelize hook docs

或者添加另一个 QueryInterface(例如 Upsert)怎么样?

Upsert Sequelize

最佳答案

看来您需要文件本身,而不需要 Sequelize 。

您能否尝试更改此行:

const Accounts = require('../models/accounts');

至:

const model = require('../models/index');

然后将其用作:

model.Accounts.beforeCreate{(...

关于javascript - 如何使用 Sequelize 和 Promise 自定义函数来播种数据文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686284/

相关文章:

使用return false时,javascript确认(取消)仍然提交表单?

javascript - 访问 Google Wave 小部件中其他页面的内容?

node.js - 如何在不读取标准输入的情况下使用 `npm login` 设置 npm 凭据?

sequelize.js - 如何在 Sequelize 中将关联设置为可空

node.js - 使用来自 GET param 的对象作为 sequelize 中的 where 子句

javascript - 如何修改此 Javascript 以在不同窗口中打开链接?

javascript - 查找单个数组元素是否存在于 mongodb 文档的数组中

javascript - 外部 JS 文件中的函数未被调用

javascript - 如何使用 Promise 填充层次结构,其中每个级别都需要满足前一个级别?

javascript - 运行任务前的 Gulp 提示