2016-05-30 5 views
7

Ich würde gerne wissen, wie Metadaten zu einem Nodejs Grpc Funktionsaufruf hinzufügen. Ich kann Kanal-Anmeldeinformationen verwenden, wenn der Client mitWie füge ich Metadaten zu Nodejs Grpc Anruf hinzu

var client = new proto.Document('some.address:8000', 
    grpc.credentials.createInsecure() 
) 

macht Welche senden sind, wenn client.Send(doc, callback) verwenden, aber die Go grpc Server sucht in dem Anruf Metadaten für Identifikationsinformationen, die ich gesetzt haben. Ich versuchte mit grpc.credentials.combineChannelCredentials mit der unsicheren Verbindung und einer grpc.Metadata Instanz, aber ich kann nicht den richtigen Weg finden, es zu tun.

Der Fehler, den ich habe, ist TypeError: compose's first argument must be a CallCredentials object. Ich habe versucht, es nach unten zu folgen, aber es geht in c-Code, der mich verliert, ich kann nicht sehen, welche Javascript-Art ich comebineChannelCredentials geben muss, um zu erreichen, wonach ich suche, und die Dokumente sind ein wenig spärlich, wie man das erreicht .

Antwort

12

Sie passieren Metadaten machen können direkt als optionales Argument für einen Methodenaufruf. Also, zum Beispiel könnten Sie das tun:

var meta = new grpc.Metadata(); 
meta.add('key', 'value'); 
client.send(doc, meta, callback); 
+1

Müsste so einfach sein ... Danke! Hoffentlich verbessern sich die Dokumente in naher Zukunft. – PudgePacket

+0

Ein bisschen Wissen ist eine gefährliche Sache: P !! – PudgePacket

1

Ich habe es schließlich durch Introspektion der GPC-Credentials Code und Ändern der Implementierung, um eine innere Funktion zu offenbaren. Im grpc Modul in den node_modules, grpc/src/node/src/credentials.js Datei die Zeile

exports.CallCredentials = CallCredentials; 

nach CallCredentials importiert wird. Dann in Ihrem Code, können Sie so etwas wie

var meta = grpc.Metadata(); 
meta.add('key', 'value'); 
var extra_creds = grpc.credentials.CallCredentials.createFromPlugin(
    function (url, callback) { 
    callback(null, meta); 
    } 
) 

Dann extra_creds verwenden im Client Builder

var creds = grpc.credentials.combineChannelCredentials(
    grpc.credentials.createSsl(), 
    extra_creds, 
) 

Jetzt schreiben Sie können Ihren Client

var client = new proto.Document(
    'some.address:8000', 
    creds, 
) 
+1

Das ist nicht notwendig. 'CallCredentials.createFromPlugin' ist bereits als der idiomatische' grpc.credentials.createFromMetadataGenerator' verfügbar. Darüber hinaus können Sie Metadaten direkt an Aufrufe übergeben, ohne die Anmeldedatenschnittstelle zu verwenden. – murgatroid99

3

Der Vollständigkeit halber werde ich auf @ murgatroid99 Antwort erweitern.

Um Metadaten zu einer Nachricht auf dem Client Sie verwenden können, befestigen:

var meta = new grpc.Metadata(); 
meta.add('key', 'value'); 
client.send(doc, meta, callback); 

Auf dem Server Seite int namens RPC-Methode ist, wenn Sie Ihre Daten möchten Sie greifen können Verwenden Sie:

function(call, callback){ 
    var myVals = call.metadata.get("key"); 
    //My vals will be an array, so if you want to grab a single value: 
    var myVal = myVals[0]; 
} 
Verwandte Themen