mysql2(https://github.com/sidorares/node-mysql2)を使っているのですが、
connectionが切断されず繋ぎっぱなしになってしまい、しばらく動かしているとToo many connectionsエラーが返ってきます。
ドキュメントではend()を呼んで開放してるようなのですが、自分の環境では開放されてないように思います。
node.jsは始めたばかりでどこが悪いのか解りませんでした・・・。
コード:
a.js
javascript
1const search = require('./b') 2const search_api = async (limit,title,url) => { 3 const conn = mysql.createPool({ 4 connectionLimit: 3, 5 host: process.env.ND_DB_HOST, 6 user: process.env.ND_DB_USER, 7 password: process.env.ND_DB_PASS, 8 database: process.env.ND_DB_NAME 9 }) 10 11 const r = await search.sites(limit, conn) 12 await conn.end() 13 return r 14} 15 16const root = { 17 search_sites: async({limit, title, url}) => await search_api(limit, title, url), 18} 19 20router.use('/', graphqlHTTP({ 21 schema: schema, 22 rootValue: root, 23 graphiql: true, 24}))
b.js
javascript
1async function sites(limit, conn) { 2 limit > 1000 ? limit = 1000 : limit 3 const [r, f] = await c.query(`select title,url,id from site_lists where deleted_at is NULL limit ${limit}`) 4 return r 5}
確認方法はこんな感じです
sudo mysql >show status like 'Threads_connected'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 1 | +-------------------+-------+ > quit (node a.js & で起動しクエリを実行してみる) sudo mysql >show status like 'Threads_connected'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 2 | <- conn.end()が実行されたら1のままでは?と思ってる +-------------------+-------+
環境
node 8.9.4
mysql2 1.5.1