我需要为模块提供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连接。
您可以创建一个数据库包装器,然后需要它。节点的require每次都返回模块的相同实例,因此您可以执行连接并返回处理程序。从Node.js文档中:
如果它将解析为相同的文件,则对require(’foo’)的每次调用都将获得完全相同的返回对象。
您可以创建db.js:
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,您只需要它。
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整个应用程序中公开和需要的其他任何内容,同时由于节点需求的工作原理而保持与数据库的一个连接:)
db