尝试通过 Sequelize 连接到 MySQL 服务器时出现“未捕获类型错误:LRU 不是构造函数”

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

我正在尝试制作一个基于 boardgame.io 的 Web 应用程序,这只是他们的 Tic-Tac-Toe 教程游戏,但每场比赛的结果都会保存到 MySQL 数据库中。在当前状态下,我的代码只是尝试连接到数据库,其结果应该显示在浏览器的控制台中。

import { Client } from 'boardgame.io/client';
import { TicTacToe } from './Game';

class TicTacToeClient {
  constructor(rootElement) {
    this.client = Client({ game: TicTacToe });
    this.client.start();
    this.rootElement = rootElement;
    this.createBoard();
    this.attachListeners();
    this.client.subscribe(state => this.update(state));
    const { Sequelize, DataTypes } = require("sequelize");
    const sequelize = new Sequelize(
      'tictactoetest',
      'xxxx',
      'xxxx',
       {
         host: 'localhost',
         dialect: 'mysql',
         dialectModule: require('mysql2')
       }
     );
     
     sequelize.authenticate().then(() => 
     {
         console.log('Connection has been established successfully.');
      }).catch((error) => {
         console.error('Unable to connect to the database: ', error);
      });
      const Record = sequelize.define("record", 
      {
          log: 
          {
            type: DataTypes.STRING,
            allowNull: false
          },
          winner: 
          {
            type: DataTypes.STRING,
            allowNull: false
          }
      }, {
          tableName: 'record'
      });
  
      sequelize.sync().then(() => {
          console.log('Record table created successfully!');
       }).catch((error) => {
          console.error('Unable to create table : ', error);
       });
  }

  createBoard() 
  {
    //Irrelevant
  }

  attachListeners() 
  {
    //Irrelevant
  }

  update(state) 
  {
    //Irrelevant
  }
}

const appElement = document.getElementById('app');
const app = new TicTacToeClient(appElement);

游戏本身运行正常,但我得到的不是成功/失败的确认,而是

"Uncaught TypeError: LRU is not a constructor"
。我已经尝试使用 NPM 安装所有 LRU 库,但没有任何帮助。我已经使用
"node"
在单独的文件中成功运行了相同的数据库连接代码,所以我不知道问题出在哪里。

javascript mysql npm sequelize.js lru
3个回答
1
投票

如果您

npm ls lru-cache
,我愿意打赌您的直接或传递依赖项之一依赖于
lru-cache
的版本 8 或更早版本,并且将获得版本 9 或 10。

我也愿意打赌,如果是这种情况,你正在使用纱线。它坏了。我建议切换到 npm 或 pnpm,因为它们能够根据规定的依赖范围解析包树。


0
投票

好吧,我已经“自己”弄清楚了。我需要搞乱

package.json

中的版本
"dependencies": {
"mysql2": "^2.2.5",
"pg-hstore": "^2.3.4",
"sequelize": "^5.22.5"
},

将客户端和服务器分开也有帮助。


0
投票

您可能会在项目中出现错误,因为它是一个无服务器的项目,因此可以在本地实现完美的功能。 La solución fue subir la dependentencia por separado en vez de incluirla en la carpeta node_modules.

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