Node.js启动/访问路由报错Error: No Sequelize instance passed如何解决
问题根因
报错直接触发原因是你在lbDB.js中调用initUser、initSector等模型初始化方法时,传入的sequelize实例为undefined,核心有两个错误:
- 仅声明了
sequelize变量,没有调用new Sequelize()完成数据库连接实例的初始化 - 代码执行顺序错误,还没完成
sequelize实例创建,就先调用模型初始化方法传入空值
修复步骤
1. 调整lbDB.js的代码执行顺序,补全sequelize实例初始化逻辑
修正后的完整lbDB.js代码如下:
const Sequelize = require("sequelize"); const configs = require("./config/config"); const { initUser } = require("./models/USERS/user"); const { initSector } = require("./models/USERS/sector"); const { initArchives } = require("./models/ARCHIVES/archives"); if (Sequelize.Promise) { Sequelize.Promise.config({ // Enables all warnings except forgotten return statements. warnings: { wForgottenReturn: false } }); } const env = process.env.NODE_ENV || "development"; const config = configs[env]; if (config.logging) config.logging = console.log; /** * @type {Sequelize} conexão com o banco de dados. */ // 此处补全sequelize实例初始化 const sequelize = new Sequelize(config.database, config.username, config.password, config); // 先创建sequelize实例,再调用模型初始化方法 const db = { db:sequelize, // 此时传入的sequelize已经是初始化完成的实例 User: initUser(sequelize), Sector: initSector(sequelize), Archives: initArchives(sequelize) }; Object.keys(db).forEach(modelName => { if ("associate" in db[modelName]) db[modelName].associate(db); }); module.exports = db;
2. 附加路由问题修正(非报错必须,按需调整)
你当前的路由配置存在路径重复前缀问题:
- app.js中配置了
app.use("/users", users) - /routes/users.js中又配置了
router.get("/users", listUsers)
最终实际访问路径为/users/users,如果你预期访问路径是/users,可以将routes/users.js中的路由改为:
router.get("/", listUsers); router.post("/", addUsers); router.put("/:id", updateUsers); router.delete("/:id", deleteUsers);
内容的提问来源于stack exchange,提问作者akhaz
相关产品推荐
相关产品推荐

