javascript - 构建 mysql+nodejs+express 应用程序的最佳方式
问题描述
我使用 mysql(没有 sequelize)并且通常在 module.export 函数中创建连接,然后我需要其他文件,如下所示:
var db;
module.exports={
getConnection = function (){return new Promise(function(resolve, reject){
// db = mysql connection stuff
resolve(db)
});},
//other database related operations similarly
}
现在,我想将所有内容分开,例如,我想要一个 userModel,其中包含一些与用户相关的数据库操作,这些操作将只导入数据库连接等等;但是实现这一目标的最佳方法是什么?谢谢。
解决方案
由于它被广泛使用并且不会出现变量命名冲突的高风险,因此我更喜欢将它添加到全局对象中。然后,您永远不必确保它被包含、传递或从模块中导入。
考虑以下示例:
// in your application initialization file such as app.js
// require items …
const mysql = require('mysql');
const connection = mysql.createPool({
connectionLimit: 10,
host: process.env.DB_HOST || '127.0.0.1',
user: process.env.DB_USER || 'local_user',
password: process.env.DB_PASSWORD || 'local_password',
database: process.env.DB_NAME || 'local_database',
multipleStatements: true,
charset: 'utf8mb4' // necessary if you might need support for emoji characters
});
connection.on('connection', function (connection) {
// handy for testing
console.log('Pool id %d connected', connection.threadId);
});
connection.on('enqueue', function () {
// handy for testing
console.log('Waiting for available connection slot');
});
// make the connection global via the the variable db
global.db = connection;
// everywhere else in your app, use the now global db variable when running queries
db.query(
'INSERT INTO users SET ?', [{name: "John Smith"}], function(error, results, fields) {
if (error) throw error;
console.log(results);
});
}
推荐阅读
- python - python3中随机库的统一(int x,int y)函数生成数字的时间复杂度是多少?
- modal-dialog - 为什么在“id”更改后点击不打开imgs?
- javascript - 如何添加进度条的预加载器和根据页面加载速度增加的百分比?
- python - 如何使用OpenCV python绘制平行于最小面积矩形宽度的线连接相反的轮廓点
- javascript - Javascript 的时间和日期
- oracle-apex - ORA-06502: PL/SQL: 数字或值错误: 表格形式 Oracle Apex 4.2 中的字符串缓冲区太小
- c++ - 虚函数和向量(C++)
- python - UnicodeDecodeError:“charmap”编解码器无法解码位置 121835 中的字节 0x8d:字符映射到
- python - 登录表单:如何检测 2 个条件?
- stripe-payments - 从 Stripe 返回“您不能在 FI 中指定不同的服务协议”