Es wird versucht herauszufinden, ob es möglich ist, Firebase-Cloud-Funktionen mit nativem Code (mithilfe der N-API) auszuführen. Ich habe ein einfaches "Hallo Welt" -Beispiel, das unter dem Emulator einwandfrei funktioniert. Wenn ich jedoch versuche, es bereitzustellen, wird der Fehler INVALID_ARGUMENT angezeigt:

  status: {
   code:  3     
   message:  "INVALID_ARGUMENT"     
  }

Das ist nicht sehr informativ ... Ich frage mich nur, ob jemand etwas Licht in die Situation bringen könnte. Vielen Dank!

Hier ist die Funktion:

'use strict';

const functions = require('firebase-functions');

exports.helloWorld = functions.https.onRequest(async(request, response) => {

console.time('Program runtime');

const testAddon = require('bindings')('testaddon.node')
const {promisify} = require('util');

module.exports = testAddon;
const asyncCommand = testAddon.hello();

try {
  const result = await asyncCommand;
  console.log('CONTENT:', result);
  response.send(result);
}
catch (err) {
    console.log('ERROR:', err);
    response.send('ERROR:', err);
}

console.timeEnd('Program runtime');
});

Und entsprechende C ++ - Quelle:

#include <napi.h>
namespace functionexample {
  std::string hello();
  Napi::String HelloWrapped(const Napi::CallbackInfo& info);
  Napi::Object Init(Napi::Env env, Napi::Object exports);
}
#include "functionexample.h"
std::string functionexample::hello(){
  return "Hello World";
}
Napi::String functionexample::HelloWrapped(const Napi::CallbackInfo& info)
{
  Napi::Env env = info.Env();
  Napi::String returnValue = Napi::String::New(env, functionexample::hello());

  return returnValue;
}
Napi::Object functionexample::Init(Napi::Env env, Napi::Object exports)
{
  exports.Set(
"hello", Napi::Function::New(env, functionexample::HelloWrapped)
  );

  return exports;
}
0
PrimeSeventyThree 19 Feb. 2020 im 18:53

3 Antworten

Beste Antwort

Es scheint, dass das Problem bei einer Version der Node Engine lag. Ich habe zu Knoten 10 anstelle von Knoten 8 gewechselt und meine Testfunktion wird ordnungsgemäß bereitgestellt und funktioniert wie erwartet.

0
GrAnD 21 Feb. 2020 im 16:23

Die N-API wurde ab Node.js v8.6.0 als stabile API markiert. Wenn Sie also eine frühe Version der Node.js-Laufzeit verwenden, können Probleme auftreten, wie hier angegeben. Dies ist der Grund, weil der Wechsel zu Node.js Version 10 gut funktioniert.

0
Nicola Del Gobbo 9 März 2020 im 11:25

Ich denke, das Problem ist, dass testaddon.hello () kein Versprechen zurückgibt, also ist es ein Problem, darauf zu warten. Wenn addon.hello () eine asynchrone Javascript-Funktion wäre, würde Javascript sicherstellen, dass es ein Versprechen zurückgibt, aber es ist eine C ++ - Funktion.

Ich habe noch nie Versprechen von einem Addon verwendet, aber das könnte helfen:

https://github.com/nodejs/node-addon-api/blob/master/doc/promises.md

0
bmacnaughton 20 Feb. 2020 im 11:20