为什么sequelize Intellisense 不起作用?

问题描述 投票:0回答:7

如何开启 Node.js Sequelize 的 Intellisense?

没有模型方法:

我能做什么?

node.js visual-studio sequelize.js
7个回答
17
投票

我通过将我的通用需求语法更改为

解决了与sequelize intellisense相关的问题
 const {Sequelize}=require('sequelize');

2
投票

我发现以前版本的 Intellisense 可以工作,但不是稳定(或 6.x)版本。
所以你可以试试这个:

const {Sequelize} = require("sequelize");


const Sequelize = require("sequelize").Sequelize

以下任一方法均有效。


1
投票

根据:

https://github.com/sequelize/sequelize/issues/11103

const Sequelize = require('sequelize').Sequelize;

0
投票

按照此操作,您将获得 Intellisense 正常工作。

  1. /models/index.js

'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;


  1. /models/User.js
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


0
投票

这是一种让 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。

example showing models on db object example showing sequelize intellisense


0
投票

在您的数据库配置中,当您导入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;

-1
投票

您没有获得 Intellisense 的原因可能是因为您没有正确地

importing
您的模型。假设您在单独的文件中定义模型,然后导入它们。我建议执行以下操作:

  1. 在您的
    index.js
    文件夹中创建一个
    models
    文件
  2. 使用
    sequelize.import
    导入所有模型并将它们关联起来。
  3. 然后将它们与
    seqeulize db instance
    Sequelize
    模块一起从 index.js 导出。
  4. 无论在项目中的哪个位置,您只需使用来自
    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
© www.soinside.com 2019 - 2024. All rights reserved.