异步等待mysql2 / promise和结束连接

时间:2018-05-04 15:29:15

标签: javascript node.js async-await node-mysql2

尝试使用MySQL数据库在Node.Js中开发REST API。你能帮我写一些更好的代码吗?

这里有两个最重要的问题,

1 - How we can take the createConnection logic out of userModel.js?
2 - Shall I end the connection on every API call?
  

预测答案

    filename : db.js
    const mysql = require('mysql2/promise');
    module.exports = async function(){
        return await mysql.createConnection({host:'localhost', user: 'user', password:'pass', database: 'database'});
    }

and in userModel.js 
const mysql = require('db.js');

module.exports.getProfile(user_id){
   try{
        const [rows, fields] = await db.execute('SELECT * FROM `table` WHERE `user_id` = ?', [1]);
        console.log(rows);
    }catch(err){
        console.log(err);
    }

    await db.end();
}

上面的代码实现会产生错误如果我们尝试再次使用" {错误:在PromiseConnection.execute&#34时连接处于关闭状态时不能添加新命令

也许如果使用这种下面给出的看似愚蠢的方法我们可以再次调用相同的API而没有任何错误。

userModel.js中还有许多函数,在这种情况下,我们必须创建和结束与每个API方法的连接。

userModel.js

const mysql = require('mysql2/promise');
const db = await mysql.createConnection({host:'localhost', user: 'user', password:'pass', database: 'database'});

    try{
        const [rows, fields] = await db.execute('SELECT * FROM `table` WHERE `user_id` = ?', [1]);
        console.log(rows);
    }catch(err){
        console.log(err);
    }

    await db.end();

任何建议都会有所帮助。 的问候,

1 个答案:

答案 0 :(得分:0)

  1. 服务器启动时可以进行连接。您应该将此代码放在启动服务器的文件中。

  2. 创建连接可能很昂贵,并且可能会影响您的应用性能。您应该使用connection pools

  3. 稍微不同的是,硬编码参数以连接数据库并不是一个好主意。您应该保留一个配置文件,根据环境可以从中读取这些值。