欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js連接postgreSQL并進行數據操作

 更新時間:2016年12月18日 09:41:48   作者:zgljl2012  
自從MySQL被Oracle收購以后,PostgreSQL逐漸成為開源關系型數據庫的首選。這篇文章就給大家介紹了關于Node.js如何連接postgreSQL數據庫,并進行數據操作的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。

前言

PostgreSql是一個面向對象的關系數據庫,postgis是一個基于PostgreSql的空間數據庫插件,主要用于管理地理空間數據。因此在GIS領域,廣泛使用PostgreSql作為空間數據庫。

首先使用npm安裝數據庫連接模塊:

npm install --save pg 

連接池創(chuàng)建

然后代碼中引入pg模塊,并編寫數據庫配置:

var pg = require('pg');

// 數據庫配置
var config = { 
 user:"postgres",
 database:"ghost",
 password:"123456",
 port:5432,

 // 擴展屬性
 max:20, // 連接池最大連接數
 idleTimeoutMillis:3000, // 連接最大空閑時間 3s
}

pg模塊中有兩種數據庫連接方式,先講連接池模式,下面是創(chuàng)建連接池:

// 創(chuàng)建連接池
var pool = new pg.Pool(config); 

傳入配置后就創(chuàng)建好了連接池。

查詢數據

查詢首先創(chuàng)建好連接,然后調用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)優(yōu)化代碼,如下:

// Async & Await 方式(需 node ^7.2.1,運行時使用 node --harmony-async-await index.js)
var query = async () => { 
 // 同步創(chuàng)建連接
 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之后,執(zhí)行代碼的時候,需要加參數--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)
 })
})

插入、修改、刪除數據

插入、修改、刪除數據和查詢的差不多

// 在表test中插入、修改、刪除數據,共兩個字段 (name, age)
pool.connect().then(client=>{ 
 // insert 數據
 client.query("INSERT INTO test(name, age) VALUES($1::varchar, $2::int)", ["xiaoming","20"]).then(res=>{
 console.log("Insert Success")
 // 如果是自增ID,有返回值的,在res里
 return res;
 }).then(res=>{
 // 查詢xiaoming
 return client.query("Select * FROM test WHERE name = $1", ["xiaoming"]);
 }).then(res=>{
 // 輸出結果,看是否插入成功
 console.log(res.rows[0])
 }).then(res=>{
 // update 數據,將age改為21
 return client.query("UPDATE test SET age=$1 WHERE name=$2", [21, "xiaoming"])
 }).then(res=>{
 // 再查詢一次xiaoming
 return client.query("Select * FROM test WHERE name = $1", ["xiaoming"]);
 }).then(res=>{
 // 再輸出結果,看是否改為了21
 console.log(res.rows[0])
 }).then(res=>{
 // 刪除數據
 client.query("DELETE FROM test WHERE name=$1", ["xiaoming"])
 }).then(res=>{
 // 最后再查詢一次xiaoming
 res = client.query("Select * FROM test WHERE name = $1", ["xiaoming"]);
 // 釋放連接
 client.release()
 return res
 }).then(res=>{
 // 再輸出結果,沒數據 undefined
 console.log(res.rows[0])
 })
})

上面插入、更新里代碼都沒有進行錯誤處理,按道理是要加的,但如果要加try...catch...的話,就太麻煩了(畢竟只是示例).

事件監(jiān)聽

可以添加error事件方法監(jiān)聽連接池情況

pool.on("error", function(err, client){ 
 console.log("error --> ", err)
})

現(xiàn)在連接池的最大空閑時間是3s,也就是3s還沒使用連接,就釋放連接,可將這個時間設置得長一些,比如30s,這就讓我們有足夠的時間關掉數據庫進行測試(與數據庫連接一斷開,這個事件就被觸發(fā)了,生產環(huán)境中,可以用來寫日志啊、發(fā)郵件短信通知什么的。。。)。

另外,還可以監(jiān)聽acquire和connect事件,前者在連接被客戶端獲取時觸發(fā),后者在連接生成以及客戶端與數據庫交互時觸發(fā)。

pool.on('acquire', function (client) { 
 console.log("acquire Event")
})

pool.on('connect', function () { 
 console.log("connect Event")
})

不使用連接池的客戶端

不使用連接池時,直接創(chuàng)建客戶端即可:

var client = new pg.Client(); 

連接池只是用來管理(緩存)連接(即客戶端)的,查詢之類的方法跟它沒關系。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能有一定的幫助,如果有疑問大家可以留言交流。

相關文章

  • 基于node簡單實現(xiàn)RSA加解密的方法步驟

    基于node簡單實現(xiàn)RSA加解密的方法步驟

    這篇文章主要介紹了基于node簡單實現(xiàn)RSA加解密的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 如何在ubuntu18.04安裝node?14.16.0

    如何在ubuntu18.04安裝node?14.16.0

    這篇文章介紹了在Ubuntu?18.04上安裝Node.js?14.16.0的詳細步驟,包括檢查服務器類型、下載合適的Node.js版本、解壓和移動文件夾、編輯環(huán)境變量文件、重新編譯配置文件以及解決可能遇到的版本沖突問題,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 淺談express 連接在線數據庫踩坑

    淺談express 連接在線數據庫踩坑

    本文記錄了連接遠程MySQL數據庫過程中遇到的常見問題及解決方案,包括用戶權限、防火墻、安全組、VPN等,具有一定的參考價值,感興趣的可以了解一下
    2025-08-08
  • Node js 中的 Multer中間件(文件上傳)

    Node js 中的 Multer中間件(文件上傳)

    本文介紹了Node.js中用于處理文件上傳的Multer中間件,詳細說明了項目設置、安裝依賴的步驟,以及如何使用Multer上傳單個和多個文件,還介紹了DiskStorage引擎、其他配置選項和錯誤處理方法,感興趣的朋友跟隨小編一起看看吧
    2025-03-03
  • nodejs文件實現(xiàn)打包成exe, 并設置開機自啟動的方法詳解(沒有黑窗口)

    nodejs文件實現(xiàn)打包成exe, 并設置開機自啟動的方法詳解(沒有黑窗口)

    這篇文章主要介紹了nodejs文件實現(xiàn)打包成exe, 并設置開機自啟動的方法,結合實例形式分析了node.js使用pkg包實現(xiàn)生成exe可執(zhí)行文件的相關操作技巧,需要的朋友可以參考下
    2023-05-05
  • Node.js對MongoDB進行增刪改查操作的實例代碼

    Node.js對MongoDB進行增刪改查操作的實例代碼

    這篇文章主要介紹了Node.js對MongoDB進行增刪改查操作 ,需要的朋友可以參考下
    2019-04-04
  • npm使用淘寶鏡像及切換回官方源的操作命令

    npm使用淘寶鏡像及切換回官方源的操作命令

    這篇文章主要給大家介紹了npm使用淘寶鏡像及切換回官方源的操作命令,文中給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • node使用UEditor富文本編輯器的方法實例

    node使用UEditor富文本編輯器的方法實例

    本篇文章主要介紹了node使用UEditor富文本編輯器的方法實例,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • 淺談如何把Node項目部署到服務器上

    淺談如何把Node項目部署到服務器上

    本文主要介紹了淺談如何把Node項目部署到服務器上,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Node.js中使用mongoose操作mongodb數據庫的方法

    Node.js中使用mongoose操作mongodb數據庫的方法

    如何利用mongoose將數據寫入mongodb數據庫呢?操作方法很簡單,下面小編給大家分享Node.js中使用mongoose操作mongodb數據庫的方法,感興趣的朋友一起看看吧
    2017-09-09

最新評論