安装 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();
});
};

node 和 postgres的更多相关文章

  1. Node.js连接postgres

    一.下载Node.js postgres驱动 Node.js里面没有postgres模块的,我们需要安装node-postgres模块. node-postgres模块的下载地址为:https://g ...

  2. ref:web security最新学习资料收集

    ref:https://chybeta.github.io/2017/08/19/Web-Security-Learning/ ref:https://github.com/CHYbeta/Web-S ...

  3. 在CentOS上以源码编译的方式安装Greenplum数据库

    集群组成: 一台主机,一台从节点. 系统环境: 操作系统:CentOS 7,64位,7.4.1708(/etc/redhat-release中查看) CPU:AMD Fx-8300 8核 内存:8GB ...

  4. postgresql数据库部署

    运维开发技术交流群欢迎大家加入一起学习(QQ:722381733) 一.postgresql数据库部署 1.前往postgresql安装包的目录(这里我部署的是10.5的版本) [root@web1 ...

  5. Web-Security-Learning

    Web Security sql注入 MySql MySQL False 注入及技巧总结 MySQL 注入攻击与防御 sql注入学习总结 SQL注入防御与绕过的几种姿势 MySQL偏门技巧 mysql ...

  6. 2021 年写 JavaScript 代码的 17 个优化技巧

    我们经常会写一些 JavaScript 代码,但是如何写出干净又易维护的代码呢?本文将讲解 17 个 JavaScript 代码的技术帮助你提高编程水平,此外,本文可以帮助您为 2021 年的 Jav ...

  7. babeljs源码

    babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...

  8. 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...

  9. Node黑客开发的10个好习惯(2016)

    在2015年底之际,javascript开发者已经掌握了大量的工具.最后一次我们调查的时候,现代化的JS蓝图才刚刚出现.今天,我们很容易在JS的庞大生态系统中迷失,而成功的团队大部分时间都遵守着JS开 ...

随机推荐

  1. c语言面试宝典(经典,超详细)

    c语言面试宝典(经典,超详细) 2018年08月25日 09:32:19 chengxuyuan997 阅读数:7799   摘自:https://blog.csdn.net/chengxuyuan9 ...

  2. Asp.net C# 遍历Excel中的表格名称

    Asp.net C# 遍历Excel中的表格名称     string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + " ...

  3. 利用windows任务计划备份sqlserver

    sqlserver Express版不含agent service(虽然可以从“服务”里看到,但是无法启动),因此无法使用代理服务执行备份作业,如果代理作业服务正常,建议还是首先采用代理服务. 此备份 ...

  4. 【c# 学习笔记】使用virtual和override关键字实现方法重写

    只有基类成员声明为virtual或abstract时,才能被派生类重写:而如果子类想改变虚方法的实现行为,则必须使用override关键字. public class Animal { private ...

  5. GPU Skinning 结合 Instanced 高效实现大量单位动画

    GPU Skinning 与 Instance 蒙皮动画 计算骨骼信息 蒙皮 GPU Skinning CPU Skinning 与 GPU Skinning 实现方式 Skinning 类型 优点 ...

  6. 高级UI-RecyclerView简单使用

    RecyclerView从Android 5.0开始引入,用以替代ListView.GridView控件,RecyclerView的存在,使得控件的耦合度更低,在ListView中需要使用ViewHo ...

  7. JS CSS写下拉菜单 竖行

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 有四个数字能组成多少个互不相同的三位数 --Python

    有四个数字能组成多少个互不相同的三位数? num = 0 for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if i ...

  9. 1、html的concept(概念)和三大基石

    概念:      HMTL:超文本标记语言 作用:      HTML是告诉浏览器接收到的数据使用什么样的数据组织形式进行显示使用:     HTML的规则 1.文件后缀名              ...

  10. Servlet技术之——概述、实现、细节、获取资源、ServletConfig、ServletContext

    Servlet概述.实现.细节.获取资源.ServletConfig.ServletContext (一) Setvlet基本概述 (1) 什么是Servlet ? Servlet(Server Ap ...