在postgresql終端中,我可以輸入命令並獲得響應。例如:如何使用Node.js net.Socket與Postgresql數據庫通信就像使用終端一樣
#create database new database;
CREATE DATABASE
在上面,我在終端的命令進入「創建數據庫newdatabase;」數據庫程序響應「CREATE DATABASE」
我試圖做同樣的事情,但使用節點網。插座。換句話說,我想向我在localhost:5432上運行的postgresql服務器發出命令,並通過套接字獲取響應。我的程序成功地建立了與postgresql服務器的連接,併成功地將數據刷新到內核,但我從來沒有得到響應(數據偵聽器永遠不會被觸發)。新數據庫也不會被創建。
我也快速瀏覽了wireshark上發生的事情。它看起來像插座得到設置。我看到我的數據以明文形式發送。 postgresql服務器然後發送ACK FIN ACK。我確認FIN ACK,然後postgresql服務器最後一次確認。所以我知道postgresql服務器不會發回任何數據。
我的問題是,爲什麼postgresql服務器會忽略我發送的命令,爲什麼postgresql服務器不會向我發回任何數據,即使這些數據只是一個錯誤。
const net = require('net');
const BlueBird = require('bluebird');
BlueBird.coroutine(function*() {
var host = "127.0.0.1";
var port = "5432";
var idle_timeout = 10000;
var MySocket = new net.Socket();
MySocket.setTimeout(idle_timeout);
var data = yield new Promise(
function resolver(resolve, reject) {
MySocket.on('connect', function() {
var flushed = MySocket.write("create database newdatabase;", "utf8");
console.log("Data flushed to kernel: " + flushed);
});
MySocket.on('data', function (data) {
console.log(data);
resolve(data);
});
MySocket.on('error', function (error) {
reject(error);
});
MySocket.connect(port, host);
}
);
return data;
})()
.then(function (data) {
console.log(data);
return data;
})
.catch(function (error) {
console.error(error);
})
你的回答清除了我的困惑,並指出我朝着正確的方向前進。我已經閱讀了一些鏈接的文檔,現在認識到協議比我原先想的要多一點。我將最終使用pg模塊,但我對網絡編程不熟悉,並且最好稍微查看一下引擎蓋下的工作情況。謝謝bolav! – TheGreg