最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

插入时出现错误

IT培训 admin 10浏览 0评论

插入时出现错误

我正在执行此:

const Seq = require(`sequelize`);

const seq = new Seq(`sistemadecadastro`, `root`, `Dev01891`, {
  host: `localhost`,
  dialect: `mysql`,
});

seq
  .authenticate()
  .then(function () {
    console.log(`Conectado ao MySQL com sucesso!`);
  })
  .catch(function (erro) {
    console.log(`Erro na conexao com MySQL: ` + erro);
  });

const postagem = seq.define(`postagens`, {
  titulo: {
    type: Seq.STRING,
  },
  conteudo: {
    type: Seq.TEXT,
  },
});

postagem.sync({ force: true });

postagem.create({
  titulo: `AVISO`,
  conteudo: `Four values - border-radius: 15px 50px 30px 5px; (first value applies to to`,
});

但是我无法添加新记录,因为INSERT正在'sequelize创建表之前发生。

控制台输出:

PS C:\Projects\TestNodeMySql> node testMySQL.js
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS `postagens`;
Executing (default): INSERT INTO `postagens` (`id`,`titulo`,`conteudo`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?);
Conectado ao MySQL com sucesso!
Executing (default): CREATE TABLE IF NOT EXISTS `postagens` (`id` INTEGER NOT NULL auto_increment , `titulo` VARCHAR(255), `conteudo` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Unhandled rejection SequelizeDatabaseError: Table 'sistemadecadastro.postagens' doesn't exist
    at Query.formatError (C:\Projects\TestNodeMySql\node_modules\sequelize\lib\dialects\mysql\query.js:244:16)
    at handler (C:\Projects\TestNodeMySql\node_modules\sequelize\lib\dialects\mysql\query.js:51:23)
    at Prepare.onResult (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:604:11)
    at Prepare.execute (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\commands\command.js:30:14)
    at Connection.handlePacket (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:417:32)
    at PacketParser.onPacket (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:75:12)
    at PacketParser.executeStart (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\packet_parser.js:75:16)
    at Socket.<anonymous> (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:82:25)
    at Socket.emit (events.js:321:20)
    at addChunk (_stream_readable.js:294:12)
    at readableAddChunk (_stream_readable.js:275:11)
    at Socket.Readable.push (_stream_readable.js:209:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23)

Executing (default): SHOW INDEX FROM `postagens`

我是node.js的新手,并进行了续集。这部分代码仅用于我的学习目的。有什么建议吗?

回答如下:

看起来您的操作顺序是:

  1. 删除表。
  2. 插入表格。
  3. 创建表。

颠倒步骤2和3的顺序。

如果这是异步代码,您可能需要等待创建表的步骤完成才能尝试插入。不要让它们以任意顺序运行。

Sequelize是由Promise驱动的,因此它通常与awaitthen()链一样简单,例如:

await postagem.sync({ force: true });

postagem.create({
  titulo: `AVISO`,
  conteudo: `Four values - border-radius: 15px 50px 30px 5px; (first value applies to to`,
});

这在某种async函数中。请注意,sync返回一个sync,这意味着如果您不小心,它可能会乱序运行。

插入时出现错误

我正在执行此:

const Seq = require(`sequelize`);

const seq = new Seq(`sistemadecadastro`, `root`, `Dev01891`, {
  host: `localhost`,
  dialect: `mysql`,
});

seq
  .authenticate()
  .then(function () {
    console.log(`Conectado ao MySQL com sucesso!`);
  })
  .catch(function (erro) {
    console.log(`Erro na conexao com MySQL: ` + erro);
  });

const postagem = seq.define(`postagens`, {
  titulo: {
    type: Seq.STRING,
  },
  conteudo: {
    type: Seq.TEXT,
  },
});

postagem.sync({ force: true });

postagem.create({
  titulo: `AVISO`,
  conteudo: `Four values - border-radius: 15px 50px 30px 5px; (first value applies to to`,
});

但是我无法添加新记录,因为INSERT正在'sequelize创建表之前发生。

控制台输出:

PS C:\Projects\TestNodeMySql> node testMySQL.js
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS `postagens`;
Executing (default): INSERT INTO `postagens` (`id`,`titulo`,`conteudo`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?);
Conectado ao MySQL com sucesso!
Executing (default): CREATE TABLE IF NOT EXISTS `postagens` (`id` INTEGER NOT NULL auto_increment , `titulo` VARCHAR(255), `conteudo` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Unhandled rejection SequelizeDatabaseError: Table 'sistemadecadastro.postagens' doesn't exist
    at Query.formatError (C:\Projects\TestNodeMySql\node_modules\sequelize\lib\dialects\mysql\query.js:244:16)
    at handler (C:\Projects\TestNodeMySql\node_modules\sequelize\lib\dialects\mysql\query.js:51:23)
    at Prepare.onResult (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:604:11)
    at Prepare.execute (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\commands\command.js:30:14)
    at Connection.handlePacket (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:417:32)
    at PacketParser.onPacket (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:75:12)
    at PacketParser.executeStart (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\packet_parser.js:75:16)
    at Socket.<anonymous> (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:82:25)
    at Socket.emit (events.js:321:20)
    at addChunk (_stream_readable.js:294:12)
    at readableAddChunk (_stream_readable.js:275:11)
    at Socket.Readable.push (_stream_readable.js:209:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23)

Executing (default): SHOW INDEX FROM `postagens`

我是node.js的新手,并进行了续集。这部分代码仅用于我的学习目的。有什么建议吗?

回答如下:

看起来您的操作顺序是:

  1. 删除表。
  2. 插入表格。
  3. 创建表。

颠倒步骤2和3的顺序。

如果这是异步代码,您可能需要等待创建表的步骤完成才能尝试插入。不要让它们以任意顺序运行。

Sequelize是由Promise驱动的,因此它通常与awaitthen()链一样简单,例如:

await postagem.sync({ force: true });

postagem.create({
  titulo: `AVISO`,
  conteudo: `Four values - border-radius: 15px 50px 30px 5px; (first value applies to to`,
});

这在某种async函数中。请注意,sync返回一个sync,这意味着如果您不小心,它可能会乱序运行。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论