Ich bin schwer zu verstehen, wie asynchrone Programmierung zu verwenden. Ich habe einen TCP-Server, der auf Verbindungen wartet, Pakete annimmt und dann die enthaltenen Daten an ein Modul weiterleitet, das Schlüsselpaare generiert und das ganze Chaos in PostgreSQL speichert. Ich muss den öffentlichen Schlüssel an den TCP-Server zurückgeben, um ihn an den Absender des ursprünglichen Pakets zurückzugeben. Was ich jetzt habe funktioniert aber ich glaube es hinterlässt den öffentlichen Schlüssel und geht unbestimmt an den Client über. Ich kann nicht entscheiden, ob ich den Prozess, den ich verwende, nicht richtig verstehe oder wenn ich den ganzen Prozess komplett falsch verstehe.Node.js Async-Modul Wert zurück
Hier ist mein Code
Server:
var net = require('net');
var keys = require('./genKey.js');
var HOST = '10.0.0.1';
var PORT = 5555;
net.createServer(function(sock) {
console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);
sock.on('data', function(data) {
// console.log('DATA ' + sock.remoteAddress + ': ' + data);
keys.genKey(data, out);
//var public = console.log(String(keys.pub));
**function out (pk) {
console.log('out function called');
var public = keys.pub;
sock.write(public);**
console.log(public);
}
//var promise = keys.genKey(data);
//promise.then(console.log, console.error);
//console.log(public);
//sock.write(String(keys.pub));
});
sock.on('error', function (exc) {
console.log("ignoring exception: " + exc);
});
sock.on('close', function(data) {
console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
});
}).listen(PORT, HOST);
console.log('Server listening on ' + HOST +':'+ PORT);
Modul:
var Promise = require('promise');
var cp = require('child_process')
, assert = require('assert')
;
const pool = require('./db');
var prkey = '';
var pukey = '';
var privateKey, publicKey;
publicKey = '';
module.exports = {
genKey: function(input) {
cp.exec('openssl genrsa 2048', function(err, stdout, stderr) {
assert.ok(!err);
prkey = stdout;
privateKey = stdout;
//console.log(privateKey);
//console.log('stdout: ', stdout);
//prkey = privateKey;
//console.log(prkey);
makepub = cp.spawn('openssl', ['rsa', '-pubout']);
makepub.on('exit', function(code) {
assert.equal(code, 0);
//console.log(publicKey);
//pukey = publicKey;
//console.log(pukey);
});
makepub.stdout.on('data', function(data) {
publicKey += data;
pukey = String(publicKey);
//console.log('stdout: ', publicKey);
writeSQL(input, prkey, pukey);
//console.log(pukey);
//return {
//pub:() => pukey
// };
**return pukey;**
});
makepub.stdout.setEncoding('ascii');
makepub.stdin.write(privateKey);
makepub.stdin.end();
//console.log('stdout: ', stdout);
});
//console.log('output keys');
//console.log(prkey);
//console.log(pukey);
//writeSQL(prkey, pukey);
}
};
function writeSQL(uuid, private, public) {
//console.log(private);
//console.log(public);
//console.log(uuid);
console.log('write sql');
//pool.query('INSERT INTO uuidkeys(uuid, public, private) values($1,$2, $3)',
// [uuid, public, private]);
};
ich für den unordentlichen Code entschuldigen, habe ich versucht, so viele verschiedene Dinge, die es sehr hässlich geworden. Wenn mir jemand sagen könnte, wie ich meinen öffentlichen Schlüssel an meinem Server an der richtigen Stelle in meiner Serverfunktion wiederherstellen kann, wäre das großartig. Hoffentlich reicht das aus, um mich auf den richtigen Weg zu bringen, dies zu verstehen.