前言
PostgreSql是一个面向对象的关系数据库,postgis是一个基于PostgreSql的空间数据库插件,主要用于管理地理空间数据。因此在GIS领域,广泛使用PostgreSql作为空间数据库。
首先使用npm安装数据库连接模块:
npm install --save pg
连接池创建
然后代码中引入pg模块,并编写数据库配置:
var pg = require('pg');// 数据库配置var config = { user:"postgres", database:"ghost", password:"123456", port:5432, // 扩展属性 max:20, // 连接池最大连接数 idleTimeoutMillis:3000, // 连接最大空闲时间 3s}
pg模块中有两种数据库连接方式,先讲连接池模式,下面是创建连接池:
// 创建连接池var pool = new pg.Pool(config);
传入配置后就创建好了连接池。
查询数据
查询首先创建好连接,然后调用api进行查询:
// 查询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 });});
输出:
Hello World
参数done是一个函数,调用这个函数可以将关闭连接(即将连接还给连接池)。
上面的是需要写回调的异步查询,可以使用ES 7中await和async(但需安装最新版本的pg,另外,需要使用7.2以上的nodejs,最好就是用最新的nodejs)优化代码,如下:
// Async & Await 方式(需 node ^7.2.1,运行时使用 node --harmony-async-await index.js)var query = async () => { // 同步创建连接 var connect = await pool.connect() try { // 同步等待结果 var res = await connect.query('SELECT $1::varchar AS OUT', ['Hello World By Async&Await']) console.log(res.rows[0].out) // 可以通过rows遍历数据 } finally { connect.release() }}// 异步进行数据库处理query().catch(e => console.error(e.message, e.stack));
在升级了nodejs之后,执行代码的时候,需要加参数--harmony-async-await
npm --harmony-async-await index.js
当然,都支持到ES7了,ES6的Promise方法肯定是支持的,如下:
pool.connect().then(client=>{ client.query('SELECT $1::varchar AS OUT', ['Hello World By Promise']).then(res=>{ client.release() console.log(res.rows[0].out) }).catch(e => { client.release() console.error('query error', e.message, e.stack) })})
插入、修改、删除数据
插入、修改、删除数据和查询的差不多
新闻热点
疑难解答
图片精选