接下来,我们以 mySQL 数据库为例,介绍如何在 Node.js 中使用数据库。
首先,需要先使用 npm 包管理工具安装 MySQL 客户端开发包,npm install mysql
- var mysql = require('mysql')
公司的测试环境数据库,密码已做处理
- var mysql = require('mysql')
- var connection = mysql.createConnection({
- host:'172.16.20.103',
- port:3308,
- database:'test',
- user:'JRJ_Win',
- password:'FT%^$fjYR56'
- })
- connection.connect(function(err){
- if(err){
- console.log(err)
- console.log('与mysql数据库连接失败')
- }else{
- console.log('与mysql数据库连接成功')
- connection.end(function(err){
- if (err) {
- console.log('关闭mysql数据库失败')
- }else{
- console.log('关闭mysql数据库成功')
- }
- })
- }
- })
案例效果
案例如下
- connection.query(sql, [parameters], callback)
- var mysql = require('mysql') var connection = mysql.createConnection({
- host: '172.16.20.103',
- port: 3308,
- database: 'test',
- user: 'JRJ_Win',
- password: 'FT%^$fjYR56'
- }) connection.connect(function(err) {
- if (err) {
- console.log(err) console.log('与mysql数据库连接失败')
- } else {
- console.log('与mysql数据库连接成功') connection.query('INSERT INTO win.luck_fine SET?', {
- username: '范小饭',
- age: 18,
- sex: '女',
- dec: '爱吃'
- },
- function(err) {
- if (err) {
- console.log(err) console.log('插入数据失败')
- } else {
- console.log('插入数据成功') connection.query('SELECT * FROM ??', ['win.luck_fine'],
- function(err, result) {
- if (err) {
- console.log('查询数据失败')
- } else {
- console.log(result);
- connection.end();
- }
- })
- }
- })
- }
- })
案例效果
有时,用户也许会查询大量数据并希望单独处理每一条单查询的数据,在 mysql 模块中,connection 对象的 query 方法返回一个可用于处理数据流数据的对象。如果使用 queru 方法的对象,那么在 query 方法中不能使用 callback 参数指定回调函数
- var mysql = require('mysql')
- var fs = require('fs')
- var connection = mysql.createConnection({
- host:'172.16.20.103',
- port:3308,
- database:'test',
- multipleStatements:true,
- user:'JRJ_Win',
- password:'FT%^$fjYR56'
- })
- var out = fs.createWriteStream('./message.txt')
- out.on('error',function(err){
- console.log('写文件操作失败');
- process.exit();
- })
- connection.connect(function(err){
- if(err){
- console.log('与mysql数据库连接失败')
- }else{
- console.log('与mysql数据库连接成功')
- var query = connection.query('select * from win.luck_fine')
- query.on('error',function(err){
- console.log('写文件操作失败');
- process.exit();
- })
- query.on('fields',function(fields){
- var str = '';
- fields.forEach(function(field){
- if(str != ''){
- str += String.fromCharCode(9);
- }else{
- str += fields.username;
- }
- })
- out.write(str+'\r\n');
- })
- query.on('result',function(row){
- connection.pause()
- out.write(row.username+row.dec+'\r\n',function(err){
- connection.resume()
- })
- })
- query.on('end',function(row){
- console.log('数据全部写入完毕')
- connection.end();
- })
- }
- })
案例效果
在开发一个 web 应用程序时,建立一个数据库链接所消耗的性能成本是比较高的,在服务器应用程序中,如果为每一个接收到的客户端请求都建立一个或多个数据库连接,将严重降低应用程序的性能,因此,在服务器应用程序中,同城需要为多个成数据连接创建并维护一个连接池,当连接不再需要使用时,这些连接可以缓存在连接池中,当接受到下一个客户端请求时,可以从连接池中取出连接并重新利用,不需要再重新建立数据库连接。
案例如下
- var pool = mysql.createPool(options)
- var mysql = require('mysql')
- var pool = mysql.createPool({
- host:'172.16.20.103',
- port:3308,
- database:'test',
- user:'JRJ_Win',
- password:'FT%^$fjYR56'
- })
- pool.getConnection(function(err,connection){
- if(err){
- console.log(err)
- console.log('与mysql数据库连接失败')
- }else{
- console.log('与mysql数据库连接成功')
- connection.query('select * from win.luck_fine',function(err,rows){
- if(err){
- console.log('查询数据操作失败')
- }else{
- console.log(rows)
- pool.end();
- }
- })
- }
- })
案例效果
同志们,点赞不花钱呀! 程序猿不易,且行且珍惜~
来源: http://www.jianshu.com/p/747ef8c404d1