Nel terminale postgresql posso digitare un comando e ottenere una risposta. Ad esempio:Come utilizzare Node.js net.Socket per comunicare con il database Postgresql come si userebbe il terminale
# crea database nuovo database;
CREATE DATABASE
Sopra io entro nel terminale il comando “crea newdatabase banca dati;” Il programma di database risponde “CREATE DATABASE”
che sto cercando di fare la stessa cosa, ma con una rete nodo .Socket. In altre parole, voglio inviare comandi al server postgresql che ho in esecuzione su localhost: 5432 e ottenere una risposta tramite un socket.
Il mio programma configura una connessione con il server postgresql e scarica correttamente i dati nel kernel, ma non ottengo mai una risposta (il listener di dati non viene mai attivato). Il nuovo database non viene creato neanche.
Ho anche dato una rapida occhiata a cosa succede su wireshark. Sembra che il socket sia configurato. Vedo che i miei dati vengono inviati in chiaro. Il server postgresql invia quindi ACK FIN ACK. ACCO l'ACK FIN e quindi gli ACK postgresql del server un'ultima volta. Quindi so che il server postgresql non invia alcun dato indietro.
La mia domanda è, perché il server postgresql ignora il comando che invio e perché il server postgresql non mi invia alcun dato indietro, anche se quel dato è solo un errore.
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);
})
La tua risposta chiarisce la mia confusione e mi indica la giusta direzione. Ho letto parte della documentazione che hai collegato e ora mi rendo conto che il protocollo è un po 'più complicato di quello che pensavo in origine. Finirò per usare il modulo pg, ma sono nuovo nella programmazione web e ho sentito che è meglio dare un'occhiata a come funzionano le cose sotto il cofano. Grazie bolav! – TheGreg