nodeJSメモ帳

nodeJSのメモ帳です。

492 views

mysqlをawait化

mysqlを非同期で呼ぶのは勘弁して欲しいとき。一つのテーブルだけ検索するのであれば非同期でもいいかなと思うけど、4つくらいテーブルを検索するときに非同期だとネストが深くなってつらい。
そんなときは、utilのpromisifyを使えば同期化できる。
ただし、コール元の関数にasyncが付いていないと駄目なことに注意。
router.getのコールバック関数にasyncをつけてよいのかはよくわかっていないが、とりあえず動く。

var express = require('express');
var mysql = require('mysql');
const util = require('util');

var router = express.Router();

/* GET home page. */
router.get('/', async function(req, res, next) {

  console.log(g_dbConfig);

  var con = mysql.createPool(g_dbConfig);
  con.query = util.promisify(con.query).bind(con);


  var results = await con.query("select * from users");
  console.log("db fin");
  //console.log(results);


  console.log("index fin");

  res.render('index', { title: 'Express' });
});

module.exports = router;

やっぱり、router.getの関数をasyncにするのは嫌だな、という場合はこちら。

var express = require('express');
var mysql = require('mysql');
const util = require('util');

var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {

  console.log(g_dbConfig);

  var con = mysql.createPool(g_dbConfig);
  con.query = util.promisify(con.query).bind(con);

  (async()=>{
    var results = await con.query("select * from users");
    console.log("db fin");
    //console.log(results);
  })();


  console.log("index fin");

  res.render('index', { title: 'Express' });
});

module.exports = router;

どっちにせよ、可読性はあまりよろしくない。

Page 7 of 13.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626