解析基于文件名的续集模型

问题描述 投票:1回答:1

如何基于文件名来构造和访问我的续集模型?

建立:

/models
  index.js
  User.js

index.js:

import Sequelize from 'sequelize';
const options = {
  operatorsAliases,
  host: envConfig.host,
  dialect: envConfig.dialect
};

const sequelize = new Sequelize(envConfig.database, envConfig.username, envConfig.password, options);

fs.readdirSync(__dirname).filter(file => {
  return (file.indexOf('.') !== 0) && (file !== 'index.js') && (file.slice(-3) === '.js');
}).forEach(file => {
  let model = sequelize.import(path.join(__dirname, file));
  db[model.name] = model;
});

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

export default db;

user.js的

export default (sequelize, dataTypes) => {
  return sequelize.define('User', {
    email: {
      type: dataTypes.STRING,
      unique: true,
      allowNull: false
    },
    passwordDigest: {
      type: dataTypes.STRING,
      allowNull: false
    }
  });
};

目前,我可以这样做访问.create()

import models from '../models/index';

console.log(models.User.create.toString());
/*
create(values, options) {
    options = Utils.cloneDeep(options || {});

    return this.build(values, {
      isNewRecord: true,
      attributes: options.fields,
      include: options.include,
      raw: options.raw,
      silent: options.silent
    }).save(options);
  }
*/

但我希望能够做到这一点

import { User } from '../models';

User.create({stuff: 1});
javascript ecmascript-6 sequelize.js
1个回答
1
投票

如果你做export default,你不能使用解构。

我建议像this那样做:

import models from '../models';
const {User} = models;

User.create({stuff: 1});

但您也可以定义模型,如:

const models = (sequelize, dataTypes) => {
  return sequelize.define('User', {
    email: {
      type: dataTypes.STRING,
      unique: true,
      allowNull: false
    },
    passwordDigest: {
      type: dataTypes.STRING,
      allowNull: false
    }
  });
};

export const User = models.User;

然后根据需要使用它。

© www.soinside.com 2019 - 2024. All rights reserved.