【问题标题】:Can't use query function in migration不能在迁移中使用查询功能
【发布时间】:2022-01-19 18:31:20
【问题描述】:

我正在尝试使用 Sequelize 在 JavaScript 中的迁移文件中发出一个简单的 SELECT 请求。

使用此代码:

const Sequelize = require("sequelize");
const { query, QueryTypes } = use_env_variable
  ? new Sequelize(process.env[use_env_variable], config)
  : new Sequelize(database, username, password, config);

module.exports = {
  up: async ({ addColumn, removeColumn }, { INTEGER }) => (
    const results = await query("SELECT * FROM table;", { type: QueryTypes.SELECT });
  ),
  down: async () => {}
});

我遇到了错误:

错误:无法读取未定义的属性“选项”

同时,如果我不专门从 sequelize 中仅导入 queryQueryTypes 并使用常规的 sequelize.querysequelize.QueryTypes.SELECT 它将起作用:

const Sequelize = require("sequelize");
const sequelize = use_env_variable
  ? new Sequelize(process.env[use_env_variable], config)
  : new Sequelize(database, username, password, config);

module.exports = {
  up: async ({ addColumn, removeColumn }, { INTEGER }) => (
    const results = await sequelize.query("SELECT * FROM table;", { type: sequelize.QueryTypes.SELECT });
  ),
  down: async () => {}
});

上面的代码可以按我需要的方式正常工作,但是为什么呢?如果我混合这两个代码以使sequelize.queryquery 像这样导入:

const Sequelize = require("sequelize");
const sequelize = use_env_variable
  ? new Sequelize(process.env[use_env_variable], config)
  : new Sequelize(database, username, password, config);
const { query, QueryTypes } = use_env_variable
  ? new Sequelize(process.env[use_env_variable], config)
  : new Sequelize(database, username, password, config);

我自己认为console.log(query === sequelize.query); 会返回true,但使用query 而不是sequelize.query 会引发ERROR: Cannot read property 'options' of undefined 错误...

我哪里做错了?

【问题讨论】:

  • 为什么要尝试在迁移中实例化连接?只需在 JSON 格式中使用 .sequelizrcconfig-file 并使用 NODE_ENV 指示 DB 所需的配置
  • @Anatoly 我已考虑您的评论,但与我的问题不太相关。

标签: node.js sequelize.js sequelize-cli


【解决方案1】:

续集'Slack 的某个人回答了我:

这很正常。 query 是一个需要知道它被调用的实例的方法。如果从 sequelize 实例中提取它,它的 this 将是未定义的,而不是 sequelize 实例 你可以这样做:

const sequelize = new Sequelize(process.env[config.use_env_variable], config);
const { QueryTypes } = sequelize;
const query = sequelize.query.bind(sequelize);

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-06-21
    相关资源
    最近更新 更多