Node.js Firebase:如何修复错误:enoint:没有这样的文件或目录,打开';node_modules/protobufjs/google/protobuf/api.proto';

Node.js Firebase:如何修复错误:enoint:没有这样的文件或目录,打开';node_modules/protobufjs/google/protobuf/api.proto';,node.js,firebase,amazon-ec2,google-cloud-firestore,Node.js,Firebase,Amazon Ec2,Google Cloud Firestore,我们正在对cloud firestore进行以下查询: ` var meeting = await db.collection("meetings").where( "pin", "==", request.body.Digits).where( "status", "==", "in-progress").get()` 这可以在本地机器上运行,但在部署到EC2时失败。我们在两者上都安装了Firestore客户端库,但我们在部署时会对其进行网页打包 此错误尤其令人费解,因为上

我们正在对cloud firestore进行以下查询:

 ` var meeting = await db.collection("meetings").where(
    "pin", "==", request.body.Digits).where(
    "status", "==", "in-progress").get()`
这可以在本地机器上运行,但在部署到EC2时失败。我们在两者上都安装了Firestore客户端库,但我们在部署时会对其进行网页打包

此错误尤其令人费解,因为上面的代码段被包装在一个try块中,但在该行上抛出了以下错误,而没有被捕获:

UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open 'node_modules/protobufjs/google/protobuf/api.proto'
    at Object.openSync (fs.js:431:3)
    at Object.readFileSync (fs.js:333:35)
    at fetch (/home/node/server/app.compiled.js:350251:34)
    at Root.load (/home/node/server/app.compiled.js:350285:13)
    at Root.loadSync (/home/node/server/app.compiled.js:350326:17)
    at Object.loadSync (/home/node/server/app.compiled.js:347406:17)
    at Object../node_modules/@grpc/proto-loader/build/src/index.js (/home/node/server/app.compiled.js:65075:37)
    at __webpack_require__ (/home/node/server/app.compiled.js:20:30)
    at Object.<anonymous> (/home/node/server/app.compiled.js:222521:25)
    at Object../node_modules/google-gax/build/src/grpc.js (/home/node/server/app.compiled.js:222775:30)
    at __webpack_require__ (/home/node/server/app.compiled.js:20:30)
    at Object../node_modules/google-gax/build/src/index.js (/home/node/server/app.compiled.js:222819:16)
    at __webpack_require__ (/home/node/server/app.compiled.js:20:30)
    at Object.<anonymous> (/home/node/server/app.compiled.js:44631:13)
    at Object../node_modules/@google-cloud/firestore/build/src/v1/firestore_client.js (/home/node/server/app.compiled.js:45987:30)
    at __webpack_require__ (/home/node/server/app.compiled.js:20:30)
(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
UnhandledPromiseRejectionWarning:错误:enoint:没有这样的文件或目录,打开'node_modules/protobufjs/google/protobuf/api.proto'
在Object.openSync(fs.js:431:3)
在Object.readFileSync(fs.js:333:35)
获取时(/home/node/server/app.compiled.js:350251:34)
在Root.load(/home/node/server/app.compiled.js:350285:13)
位于Root.loadSync(/home/node/server/app.compiled.js:350326:17)
在Object.loadSync(/home/node/server/app.compiled.js:347406:17)
在Object../node_modules/@grpc/proto-loader/build/src/index.js(/home/node/server/app.compiled.js:65075:37)
在网页上需要(/home/node/server/app.compiled.js:20:30)
反对。(/home/node/server/app.compiled.js:222521:25)
在Object../node_modules/google gax/build/src/grpc.js(/home/node/server/app.compiled.js:222775:30)
在网页上需要(/home/node/server/app.compiled.js:20:30)
在Object../node_modules/google gax/build/src/index.js(/home/node/server/app.compiled.js:222819:16)
在网页上需要(/home/node/server/app.compiled.js:20:30)
反对。(/home/node/server/app.compiled.js:44631:13)
在Object../node_modules/@google cloud/firestore/build/src/v1/firestore_client.js(/home/node/server/app.compiled.js:45987:30)
在网页上需要(/home/node/server/app.compiled.js:20:30)
(节点:1)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1)

我们已经尝试了几乎所有您可以想到的方法,但没有实际更改查询-我们正在执行package.json和我们的构建脚本,但无法解决这个问题。有什么帮助吗?

问题是,用于Cloud Firestore的Node.js SDK使用gRPC进行通信,它基于本机代码构建,有几种方法可以解决这个问题,但我建议将您的应用程序固定到类似

这个问题有点类似于在AWS lambda中运行sdk


希望这能为您指出一个方向

问题是,Node.js SDK for Cloud Firestore使用gRPC进行通信,它是基于本机代码构建的,有几种方法可以解决这个问题,但我建议将您的应用程序固定到类似

这个问题有点类似于在AWS lambda中运行sdk


希望这能为您指明一个方向

Hace u tríed安装缺少的依赖项?是的,我们尝试单独安装protobuf,尽管它应该与Firebase一起安装,但它仍然不起作用。您能做到吗?我也有类似的情况,但我没有。解决方法是将所有firebase调用移到后端。这很费时,但值得一试,因为从浏览器调用firebase无论如何都是一种糟糕的方式。您是否尝试安装缺少的依赖项?是的,我们尝试过单独安装protobuf,即使它应该与firebase一起安装,但仍然不起作用。您是否能做到这一点?我也有类似的情况,但我没有。解决方法是将所有firebase调用移到后端。这很费时,但值得一试,因为不管怎么说,从浏览器打电话到firebase是一种糟糕的风格。