警告:访问循环依赖内模块导出的不存在的属性“sequelize”

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

问题

nodemon server.js

[nodemon] 2.0.15

[nodemon] to restart at any time, enter `rs`

[nodemon] watching path(s): *.*

[nodemon] watching extensions: js,mjs,json

[nodemon] starting `node server.js`

Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.     
(node:11528) Warning: Accessing non-existent property 'sequelize' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
Server running at port: 8000

网站可以正常运行。 但我该如何解决呢?

ps。每次运行时的数字都是唯一的。 -->(节点:11528)

其他问题

当我使用-->“node --trace-warnings续集”时

PS C:\Users\company\Desktop\Project> node --trace-warnings sequelize
node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module 'C:\Users\company\Desktop\Project\sequelize'
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

当我使用-->“nodemon -e js,ejs index.js”时

[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,ejs
[nodemon] starting `node index.js index.js`
node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module 'C:\Users\company\Desktop\Project\index.js'
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}
[nodemon] app crashed - waiting for file changes before starting...

“node --trace-warningssequelize”和“nodemon -e js,ejs index.js”:网站无法正常运行。但我该如何解决呢?

节点:v16.13.1 续集:v6.12.4 节点蒙:v2.0.15 数据库:mySQL

代码server.js

require('dotenv').config()

const express = require('express')
const app = express()

const appRoutes = require('./routes')

const { sequelize } = require("./models")

const appSchedule = require("./schedules")

const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const passport = require('passport');


app.use(cookieParser("secret"));

//config session
app.use(session({
   secret: 'secret',
   resave: true,
   saveUninitialized: false,
   cookie: {
      maxAge: 1000 * 60 * 60 * 24 // 86400000 = 1 day
   }
}));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

//Config passport middleware
app.use(passport.initialize());
app.use(passport.session());

sequelize.sync().then(() => {
    
    // static resources
    app.use(`/public/`, express.static('public'))

    // ejs view
    app.set('views', 'views')
    app.set('view engine', 'ejs')

    // app route
    app.use(express.json())
    app.use(express.urlencoded({
        extended: true
    }))
    app.use(`/`, appRoutes)

    // start schedule
    appSchedule.start()
    // listen connection
    app.listen(process.env.PORT, () => {
        console.log(`Server running at port: ${process.env.PORT}`)
    })    
}).catch((error) => {
    console.error(error)
})

这是第一个问题。如果有任何错误,我在此表示歉意。

谢谢。

javascript node.js sequelize.js nodemon
3个回答
1
投票

有几个问题

  1. 当您运行
    --trace-warnings
    时,您将指向一个不存在的文件。您需要在同一个文件上运行它,例如
    node --trace-warnings server.js
  2. nodemon 调用也遇到类似的问题,您可以尝试
    nodemon -e js,ejs server.js
    看看输出是什么
  3. 这是给您带来问题的线路。该错误表明
    sequelize
    未从此文件中导出。也许您的意思是
    const sequelize = require('./models')
    ?您必须包含
    ./models
    中的代码才能确定
const { sequelize } = require("./models")

1
投票

我发现这种安排对错误没有影响,当我在另一个文件中调用该函数时,我调整了Javascript解构,它神奇地解决了问题。

我改变了server.js的顶部

来自:

const { sequelize } = require("./models")

至:

const model = require("./models")

在你想要调用该函数的地方,你可以这样做:

model.sequelize.sync().then(() => {

这解决了我的问题


0
投票

nodejs 中禁止循环依赖

就我而言,实际发生的情况是我的控制器包含我为了可重用性而创建的函数,然后我开始在名为 helpers 的文件中创建此类函数......后来我从helpers 文件,但有一个函数我从我的控制器导入到我的助手文件...这导致了循环依赖...简而言之,我的控制器正在使用来自助手的函数,而助手正在使用来自我的控制器的函数。

什么对我有用?

我刚刚将辅助函数从控制器移至辅助文件,它解决了问题...

© www.soinside.com 2019 - 2024. All rights reserved.