我通过将我的通用需求语法更改为
解决了与sequelize intellisense相关的问题 const {Sequelize}=require('sequelize');
我发现以前版本的 Intellisense 可以工作,但不是稳定(或 6.x)版本。
所以你可以试试这个:
const {Sequelize} = require("sequelize");
const Sequelize = require("sequelize").Sequelize
以下任一方法均有效。
根据:
https://github.com/sequelize/sequelize/issues/11103
const Sequelize = require('sequelize').Sequelize;
按照此操作,您将获得 Intellisense 正常工作。
'use strict';
const Sequelize = require('sequelize');
const db = {};
/**
* @type {Sequelize.Sequelize}=con
*/
let con = new Sequelize(process.env.db_database, process.env.db_username, process.env.db_password, {
host: process.env.db_host,
dialect: "mysql"
});
(async function () {
try {
//ck connection
await con.authenticate()
//attach models
db.User = require('./User')
db.Test = require('./Test')
//associate
Object.keys(db).forEach(modelName => {
// if (db[modelName].associate) {
// db[modelName].associate(db);
// }
});
//sync
await con.sync({
logging: true,
force: false
})
} catch (e) {
console.log("error db con: ", e.name)
}
}())
db.con = con
module.exports = db;
const { DataTypes } = require('sequelize');
const { con } = require('.');
const User = con.define("User", {
name: {
type: DataTypes.STRING,
allowNull: false
},
password: {
type: DataTypes.STRING,
allowNull: false
}
})
module.exports = User
这是一种让 IntelliSense 在模型上工作的 ES6 方法(而不仅仅是实例化的类)。
首先 - 声明可以导入到许多文件中的sequelize实例。
// sequelize.js
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize(...);
export default sequelize;
第二 - 按照sequelize-cli 的建议设置进行操作。请注意,您需要重新导入模型。我知道在这里不断添加
export
声明可能看起来很烦人,但是当您添加这 1 行时,您将获得所有好处:)
// models/index.js
import Sequelize from 'sequelize';
import sequelize from '../config/sequelize';
export * from './user';
export * from './another-model';
// ... etc
let db = {};
const basename = path.basename(__filename);
fs.readdirSync(__dirname)
.filter((file) => file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js')
.forEach((file) => {
const module = require(path.join(__dirname, file));
Object.values(module).forEach((model) => {
db[model.name] = model;
});
});
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
export {
sequelize,
Sequelize,
migrations
};
第三 - 像这样更新模型文件。 注意:在此处添加
export
关键字并导入您的基本 Sequelize 实例。
//models/MyModel.js
import Sequelize from 'sequelize';
import sequelize from '../sequelize';
const { DataTypes } = Sequelize;
export const User = sequelize.define('User', {
userId: DataTypes.UUID,
...
}, {});
User.associate = function (models) {
User.belongsTo(models.Admin, {
foreignKey: 'adminId',
});
};
分享这个是因为我很难找到一个有效的示例,因为如果你遵循官方文档,你就不会在模型上获得 IntelliSense。
在您的数据库配置中,当您导入sequelize时,像这样导入
const Sequelize = require("sequelize").Sequelize;
const Sequelize = require("sequelize").Sequelize;
const sequelize = new Sequelize("dbname", "dbuser", "password", {
host: "host",
dialect: "dialect",
});
module.exports = sequelize;
您没有获得 Intellisense 的原因可能是因为您没有正确地
importing
您的模型。假设您在单独的文件中定义模型,然后导入它们。我建议执行以下操作:
index.js
文件夹中创建一个 models
文件sequelize.import
导入所有模型并将它们关联起来。seqeulize db instance
和 Sequelize
模块一起从 index.js 导出。require
的 /models
数据库即可获得模型。模型/index.js
const sequelize = new Sequelize(DB_NAME, DB_USERNAME, DB_PASSWORD)
const db = {
Sequelize: Sequelize,
sequelize,
User: sequelize.import("./user"),
Message: sequelize.import("./message")
}
Object.keys(db).forEach(model => {
if ("associate" in db[model]) {
db[model].associate(db)
}
})
module.exports = db