一尘不染

如何在Node.js中的单个文件中提供mysql数据库连接

mysql

我需要为模块提供mysql连接。我有这样的代码。

var express = require('express'),
app = express(),
server = require('http').createServer(app);

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : '127.0.0.1',
    user     : 'root',
    password : '',
    database    : 'chat'
});

connection.connect(function(err) {
    if (err) {
        console.error('error connecting: ' + err.stack);
        return;
    }
});

app.get('/save', function(req,res){
    var post  = {from:'me', to:'you', msg:'hi'};
    var query = connection.query('INSERT INTO messages SET ?', post, function(err, result) {
        if (err) throw err;
    });
});

server.listen(3000);

但是我们如何为所有模块提供一次mysql连接。


阅读 250

收藏
2020-05-17

共1个答案

一尘不染

您可以创建一个数据库包装器,然后需要它。节点的require每次都返回模块的相同实例,因此您可以执行连接并返回处理程序。从Node.js文档中

如果它将解析为相同的文件,则对require(’foo’)的每次调用都将获得完全相同的返回对象。

您可以创建db.js

var mysql = require('mysql');
var connection = mysql.createConnection({
    host     : '127.0.0.1',
    user     : 'root',
    password : '',
    database : 'chat'
});

connection.connect(function(err) {
    if (err) throw err;
});

module.exports = connection;

然后在您的中app.js,您只需要它。

var express = require('express');
var app = express();
var db = require('./db');

app.get('/save',function(req,res){
    var post  = {from:'me', to:'you', msg:'hi'};
    db.query('INSERT INTO messages SET ?', post, function(err, result) {
      if (err) throw err;
    });
});

server.listen(3000);

这种方法使您可以抽象出任何连接详细信息,包装您想要在db整个应用程序中公开和需要的其他任何内容,同时由于节点需求的工作原理而保持与数据库的一个连接:)

2020-05-17