nodeJSのメモ帳です。
572 views
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/