首页 > 解决方案 > 续集方言问题

问题描述

关于如何使用 Sequelize 的文档并不是很简单,尤其是对于想要使用 config.js 而不是 config.json 的新手而言。我在 stackoverflow 上尝试了不同的示例,但由于某些原因对我不起作用。但是,我把它放在这里是为了找人帮忙

我正在使用 NodeJs & Sequelize 构建一个 API 应用程序,我已经完成了以下操作

包.json 文件

"dependencies": {
    "body-parser": "^1.19.0",
    "cors": "^2.8.5",
    "cross-env": "^7.0.3",
    "deep-email-validator": "^0.1.18",
    "dotenv": "^10.0.0",
    "express": "^4.17.1",
    "express-fileupload": "^1.2.1",
    "express-handlebars": "^5.2.0",
    "formidable": "^1.2.2",
    "g": "^2.0.1",
    "handlebars": "^4.7.6",
    "jsonwebtoken": "^8.5.1",
    "lodash": "^4.17.21",
    "mysql2": "^2.2.5",
    "nodemailer": "^6.5.0",
    "sequelize": "^6.6.2",
    "sequelize-cli": "^6.2.0",
    "swagger-jsdoc": "^6.1.0",
    "swagger-ui-express": "^4.1.6",
    "sweetalert": "^2.1.2",
    "sweetalert2": "^10.14.0",
    "unique-string": "^2.0.0"
  },

.env 文件

ACCESS_PORT= 5000
ACCESS_TOKEN_SECRET=
ACCESS_REFRESH_TOKEN=
DB_USER=root
DB_PASSWORD=
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=db_name
DB_NAME_TEST=db_name
DB_DIALECT=mysql

config.js(位于 config 文件夹内)

require('dotenv').config()

const { DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT, DB_NAME_TEST, DB_DIALECT } = process.env;

module.exports = {
    development: {
        database: DB_NAME,
        username: DB_USER,
        password: DB_PASSWORD,
        port: DB_PORT,
        options: {
            host: DB_HOST,
            dialect: DB_DIALECT
        },
    },
    test: {
        database: DB_NAME_TEST,
        username: DB_USER,
        password: DB_PASSWORD,
        host: DB_HOST,
        port: DB_PORT,
        dialect: DB_DIALECT
    },
    production: {
        database: DB_NAME,
        username: DB_USER,
        password: DB_PASSWORD,
        host: DB_HOST,
        port: DB_PORT,
        dialect: DB_DIALECT
    }
}

index.js(此文件位于模型文件夹中)

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require('./config/config')[env];
const db = {};

let sequelize;

// if (config.use_env_variable) {
//   sequelize = new Sequelize(process.env[config.use_env_variable], config);
// } else {
//   sequelize = new Sequelize(config.database, config.username, config.password, config);
// }
sequelize = new Sequelize(config.database, config.username, config.password, config.options);

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

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

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

module.exports = db;

在运行npx sequelize-cli db:migrate时,我收到以下错误

错误:从 v4.0.0 开始需要明确提供方言

任何有关如何解决此问题的帮助将不胜感激

标签: node.jsormsequelize.js

解决方案


使用开发环境配置,您可以在选项下选择方言和主机。尝试像其他两个一样压平它。


推荐阅读