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