首页 > 解决方案 > 构建 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,其中包含一些与用户相关的数据库操作,这些操作将只导入数据库连接等等;但是实现这一目标的最佳方法是什么?谢谢。

标签: javascriptmysqlnode.jsmodule

解决方案


由于它被广泛使用并且不会出现变量命名冲突的高风险,因此我更喜欢将它添加到全局对象中。然后,您永远不必确保它被包含、传递或从模块中导入。

考虑以下示例:

// 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);
    });
  }

推荐阅读