• node 和 postgres


    安装 npm i pg ,如果慢的话,记得爬梯子

    连接池的方式:

    var pg = require('pg');
    
    // 数据库配置
    var config = {  
        user:"postgres",
        database:"test",
        password:"postgres",
        port:5432,
        // 扩展属性
        max:20, // 连接池最大连接数
        idleTimeoutMillis:3000, // 连接最大空闲时间 3s
    }
    // 创建连接池
    var pool = new pg.Pool(config);
    // 查询
    pool.connect(function(err, client, done) {  
      if(err) {
        return console.error('数据库连接出错', err);
      }
      // 简单输出个 Hello World
      client.query('SELECT $1::varchar AS OUT', ["Hello World"], function(err, result) {
        done();// 释放连接(将其返回给连接池)
        if(err) {
          return console.error('查询出错', err);
        }
        console.log(result.rows[0].out); //output: Hello World
      });
    });
    

    客户端直连方式:

    const pg=require('pg')
    var conString = "postgres://username:password@localhost/databaseName";
    var client = new pg.Client(conString);
    client.connect(function(err) {
        if(err) {
          return console.error('连接postgreSQL数据库失败', err);
        }
        client.query('SELECT * FROM tableName', function(err, data) {
          if(err) {
            return console.error('查询失败', err);
          }else{
            // console.log('成功',data.rows); 
            console.log('成功',JSON.stringify(data.rows)); 
          }
          client.end();
        });
      });

    自己摸索的一种方式:

    // 连接pg
    var pg = require('pg');
    var pool = new pg.Pool({
        host: 'XXXXXX',
        user: 'XXXX',
        password: 'XXXXX',
        database: 'XXX',
        port:5432,
        max:20, // 连接池最大连接数
        idleTimeoutMillis:3000, // 连接最大空闲时间 3s
    });
    
    function query(sql, callback) {
        pool.connect(function (err, connection,done) {
            if (err) {
                console.log('connect query:' + err.message);
                return;
            }
            // Use the connection
            connection.query(sql,[],function (err, rows) {
    	    done();
                callback(err, rows);
                //connection.release();//释放链接
            });
        });
    }
    exports.query = query;
    
    /**
         * 获取survey
    	 *localhost:5000/getAllSurveyList
         */
        app.get('/getAllSurveyList', function (req, res) {
            console.log("getAllSurveyList");
            db.query('select id,trim(latitude) as latitude,trim(lontitude) as lontitude,isshow as '+'"'+'isShow'+'"'+' from survey', function (err,rows) {	
                if (err) {
    				console.log(err);
    				console.log('--getAllSurveyList: 查询失败');
                    res.json({result:'false',datas: null});
                } else {
    				console.log('--getAllSurveyList: 查询成功');
    				//console.log(rows);
                    res.json({result: 'true', datas: rows.rows});
                }
            })
        });

    CRUD

    var pg = require('./pg'); //加载模块node-postgres,该模块要与本文件放于同一个目录下
    var conString = "postgres://postgres:postgres@localhost:5432/node-test";//此时数据库必须已经创建
                    //anything://user:password@host:port/database
    var client = new pg.Client(conString);
    
    client.connect(function(err) {
        if(err) {
            return console.error('could not connect to postgres', err);
        }
         
        //删除存在表
        console.log("Dropping table 'person'")
        var query = client.query("drop table if exists person");
        query.on('end', function() {
            console.log("Dropped!");
        });
         
        //创建表
        console.log("Creating table 'person'");
        query = client.query("create table person(id serial, username varchar(10), password varchar(10), age integer)");
        query.on('end', function(){
            console.log("Created!");
         }); 
        
        //添加
        client.query('INSERT INTO person(username, password, age) VALUES($1, $2, $3)', ["zhangsan", "123456", 20], function(err, result) {
        console.log( "====================add========================");
        if(err) {
            console.log(err); 
            return rollback(client);
        }
            console.log( result);
        }); 
    
    
        //查询
        client.query('select username, password, age from person where id = $1', [3], function(err, result) {
        console.log( "===================query=========================");
        if(err) {
            console.log(err);  
        }
            console.log(result.rows[0]);
        });
    
        //更新
        client.query('update person set password=$1 where id = $2', ["11a",1], function(err, result) {
        console.log( "=====================update=======================");
        if(err) {
            console.log(err);  
        }
            console.log(result);
        });
    
        //删除
        client.query('delete from person where id = $1', [1], function(err, result) {
        console.log( "====================remove=======================");
        if(err) {
            console.log(err);  
        }
            console.log(result);
            client.end();
        });
        
    });
     
     var rollback = function(client) { 
      client.query('ROLLBACK', function() {
        client.end();
      });
    };
    
  • 相关阅读:
    如何在原生微信小程序中实现数据双向绑定
    【推荐】开源项目minapp-重新定义微信小程序的开发
    iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 规范与部署
    iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 错误处理
    系列3|走进Node.js之多进程模型
    手把手教你撸一个 Webpack Loader
    iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志
    React Native 网络层分析
    如何实现VM框架中的数据绑定
    iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 解析JSON
  • 原文地址:https://www.cnblogs.com/marszhw/p/11279952.html
Copyright © 2020-2023  润新知