Node.js中使用数据库

在mysql模块中,可以使用createConnection方法创建一个与数据库连接的Connection对象。

   var connection = mysql.createConnection(options);

实际使用中

   var mysql = require('mysql');
   var connection = mysql.createConnection({
      host: 'localhost',
      port: 3306,
      database: 'mysql',
      user: 'sysuzhyupeng',
      password: ''
   })
   connection.connect(function(err){
      if(err) console.log(...);
      else {
          console.log('连接成功');
          // end方法在向数据库服务器发送用于关闭连接的COM_QUIT数据包之前江所有被挂起的查询操作执行完毕,而destroy不执行被挂起的查询操作
          connection.end(function(err){ ... })
      }
   })

使用Connection对象的query方法统一执行数据的增删改查

   connection.query(sql, [parameters], [callback]);

为了防止SQL注入攻击,需要使用该对象的escape方法对输入数据进行处理

   var query = 'SELECT * FROM posts WHERE title=' + 
        connection.escape('hello');

可以在查询语句中使用?? 占位符来为SQL标识符使用参数

    connection.query('SELECT * FROM ?? WHERE title= ?', ['users', userId]);

使用数据流方式查询数据

Connection对象的query方法返回一个可用于处理数据流数据的对象,如果使用query方法返回的对象,那么query方法中不能使用callback参数值指定回调函数。

   var out = fs.createWriteStream('./message.txt');
   var query = connection.query('select * from users');
   query.on('error', function(err){})
   .on('field', function(field){
       //读取到所有字段后将字段写入流
       out.write(...)
   })
   .on('result', function(row){
       // 暂停读取
       connection.pause();
       out.write(row.id, function(err){
           connection.resume();
       })
   })

当读取该表中的一条数据之后暂停读取后续数据,然后将读取到的记录写入文件中,然后使用resume 方法恢复读取后续数据。在对读取到的记录执行一个耗时较长的IO操作时,Connection对象的pause和resume方法可以帮助减轻读取大数据量时的压力。

创建连接池

如果为每一个接受到的客户端请求都建议一个或多个数据库连接,将严重降低性能。因此通常需要为多个数据库连接创建并维护一个连接池,当连接不再需要使用时,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,可以从连接池中取出连接并重新利用
在mysql模块中,可以使用createPool创建连接池

   var pool = mysql.createPool(options);

在建立连接池之后,不需要显示地使用createConnection方法连接,可以直接使用连接池对象的getConnection 方法。

   var mysql = require('mysql');
   var pool = mysql.createPool({
      host: 'localhost',
      port: 3306,
      database: 'mysql',
      user: 'sysuzhyupeng',
      password: ''
   });
   pool.getConnection(function(err, connnection){
       if(err) { ... }
       else {
           //和原来使用方法相同
           connection.query(...)
       }
   })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值