mysql2 中的承诺

惩罚天空

最近我想学习 Node.js 来帮助我找到一份工作,所以我开始了一个网页抓取应用程序。

我从 mysql 包开始,但在编写代码后我没有想到这是一个异步过程。

然后我发现 mysql2 有承诺,但我不确定我是否理解如何正确使用它们,而且我的做法很糟糕。

这是我的代码


const mysql = require('mysql2');

const pool = mysql.createPool({ ... });

var categorias = [];
var querySQL;

/*
Here goes web scraping stuff not needed in this question
*/

pool.getConnection(function(err, connection){

      if(err) throw err;

      querySQL = "SELECT 1 FROM Categories LIMIT 1";

      connection.promise().query(querySQL).then(([rows,fields])=> {

        if (rows!=undefined) {
          console.log("The table already exist");
        }else {

          querySQL = "CREATE TABLE Categories (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20))";

          connection.query(querySQL,function(err,rows,field){

            if(err) throw err;

            console.log("The table has been created");
            console.log(rows);

          });

        }

      })
      .catch(console.log)
      .then( ()=> {

        querySQL = "SELECT x FROM y";

        connection.promise().query(querySQL).then(([rows,fields])=> {

          /*
          More stuff
          */

        })
        .catch(console.log)
        .then( ()=> console.log("Promise ended") );

      });

    });

问题是我是否在做好这样的链接承诺,或者还有另一种方式,因为这段代码是在没有任何表的情况下创建数据库的表,然后插入数据。每次网站更新他的内容时第一次插入后,我将创建一个临时表来检查是否有新的类别、对象...等,所以这让我在这个承诺中得到更多的承诺。

特里·伦诺克斯

我建议尝试 async/await 语法,它使事情更具可读性。

这应该做你想做的:

async function tableExists(pool, tableName) {
    try {
        const query = `SELECT 1 FROM ${tableName} LIMIT 1;`;
        await pool.execute(query);
        return true;
    } catch (err) {
        return false;
    }
}

async function createdb() {
    const mysql = require('mysql2/promise');

    const config = {
        host: 'host',
        user: 'username',
        password: 'password_goes_here',
        database: 'some_database'
    }

    const pool = mysql.createPool(config);

    let tableOk = await tableExists(pool, "categories");
    if (tableOk) {
        console.log("Table 'Categories' already exists.");
        return;
    }
    console.log("Table 'Categories' does not exist, creating...");

    try { 
        const createQuery = "CREATE TABLE Categories (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20));";
        await pool.execute(createQuery);
        console.log("Table created successfully.");
    } catch (err) {
        console.error("Table creation failed:", err);
    }

    pool.end();
}

createdb();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Redmine安装中的秘密生成因mysql2 / mysql2中的错误而失败

来自分类Dev

随机在mysql2中用于Rails 4应用

来自分类Dev

Mysql2“字段列表”中的未知列“个人”

来自分类Dev

mysql2 gem在安装过程中挂起

来自分类Dev

mysql2 gem在gem列表中,但获取项目找不到gem

来自分类Dev

如何从node.js,express.js,mysql2中的“行”对象解析数据

来自分类Dev

Mysql2 :: Error:表不存在:从`sessions'中显示完整字段

来自分类Dev

RubyMine无法在Rails 4.1.5中使用mysql2 gem

来自分类Dev

单独文件中的NodeJS mysql2连接即将停止

来自分类Dev

Mysql2 ::错误:“字段列表”中的未知列“ sum_hours”

来自分类Dev

Mac OSX / MySQL 5.6.19上的“ Mysql2 :: Error:在查询过程中失去与MySQL服务器的连接”

来自分类Dev

Mac OSX / MySQL 5.6.19上的“ Mysql2 :: Error:在查询过程中失去与MySQL服务器的连接”

来自分类Dev

Angular 2 中未处理的承诺拒绝

来自分类Dev

在 Angular2 中对 *ngFor 的承诺

来自分类Dev

安装mysql2 gem

来自分类Dev

宝石mysql2安装

来自分类Dev

安装mysql2 gem

来自分类Dev

如何在express.js中解决承诺的mysql查询?

来自分类Dev

承诺中的 Node.js mysql 错误处理

来自分类Dev

Ionic 2 / Angular 2中的承诺,怎么办?

来自分类Dev

Ionic 2 / Angular 2中的承诺,怎么办?

来自分类Dev

承诺中的AngularJs承诺

来自分类Dev

gem install mysql2 /无法加载此类文件-mysql2 / mysql2

来自分类Dev

未捕获(承诺中)使用SweetAlert2取消

来自分类Dev

如何在Typescript / Angular 2中做出承诺?

来自分类Dev

将`gem'mysql2'`添加到您的Gemfile中(并确保其版本为ActiveRecord要求的最低版本)

来自分类Dev

承诺中的角度测试承诺

来自分类Dev

Rails Server导致Mysql2错误

来自分类Dev

Ruby on Rails MySQL2 ::错误

Related 相关文章

  1. 1

    Redmine安装中的秘密生成因mysql2 / mysql2中的错误而失败

  2. 2

    随机在mysql2中用于Rails 4应用

  3. 3

    Mysql2“字段列表”中的未知列“个人”

  4. 4

    mysql2 gem在安装过程中挂起

  5. 5

    mysql2 gem在gem列表中,但获取项目找不到gem

  6. 6

    如何从node.js,express.js,mysql2中的“行”对象解析数据

  7. 7

    Mysql2 :: Error:表不存在:从`sessions'中显示完整字段

  8. 8

    RubyMine无法在Rails 4.1.5中使用mysql2 gem

  9. 9

    单独文件中的NodeJS mysql2连接即将停止

  10. 10

    Mysql2 ::错误:“字段列表”中的未知列“ sum_hours”

  11. 11

    Mac OSX / MySQL 5.6.19上的“ Mysql2 :: Error:在查询过程中失去与MySQL服务器的连接”

  12. 12

    Mac OSX / MySQL 5.6.19上的“ Mysql2 :: Error:在查询过程中失去与MySQL服务器的连接”

  13. 13

    Angular 2 中未处理的承诺拒绝

  14. 14

    在 Angular2 中对 *ngFor 的承诺

  15. 15

    安装mysql2 gem

  16. 16

    宝石mysql2安装

  17. 17

    安装mysql2 gem

  18. 18

    如何在express.js中解决承诺的mysql查询?

  19. 19

    承诺中的 Node.js mysql 错误处理

  20. 20

    Ionic 2 / Angular 2中的承诺,怎么办?

  21. 21

    Ionic 2 / Angular 2中的承诺,怎么办?

  22. 22

    承诺中的AngularJs承诺

  23. 23

    gem install mysql2 /无法加载此类文件-mysql2 / mysql2

  24. 24

    未捕获(承诺中)使用SweetAlert2取消

  25. 25

    如何在Typescript / Angular 2中做出承诺?

  26. 26

    将`gem'mysql2'`添加到您的Gemfile中(并确保其版本为ActiveRecord要求的最低版本)

  27. 27

    承诺中的角度测试承诺

  28. 28

    Rails Server导致Mysql2错误

  29. 29

    Ruby on Rails MySQL2 ::错误

热门标签

归档