Google Storage 不是构造函数错误

Posted

技术标签:

【中文标题】Google Storage 不是构造函数错误【英文标题】:Google Storage is not a constructor error 【发布时间】:2019-02-11 20:25:42 【问题描述】:

我正在构建一个应用程序,我的目标是每次有人将图像上传到 Firebase 存储时,云功能都会调整该图像的大小。

...
import * as Storage from '@google-cloud/storage'
const gcs = new Storage()
...

exports.resizeImage = functions.storage.object().onFinalize( async object => 
   const bucket = gcs.bucket(object.bucket);
   const filePath = object.name;
   const fileName = filePath.split('/').pop();
   const bucketDir = dirname(filePath);
....

当我尝试部署这个功能时,我得到了这个错误:

Error: Error occurred while parsing your function triggers.

TypeError: Storage is not a constructor

我尝试使用“new Storage()”或仅使用“Storage”,但没有任何效果。

我是这里的新手,所以如果有什么我忘了让你调试,请告诉我。

谢谢!


谷歌云/存储:2.0.0

节点js:v8.11.4

【问题讨论】:

【参考方案1】:

API documentation for Cloud Storage 建议你应该使用 require 来加载模块:

const Storage = require('@google-cloud/storage');

这适用于 2.x 版之前的 Cloud Storage 版本。

在 2.x 中,API 发生了重大变化。您现在需要这样做:

const  Storage  = require('@google-cloud/storage');

如果您需要 TypeScript 绑定,请考虑通过 Firebase Admin SDK 使用 Cloud Storage。 The Admin SDK simply wraps the Cloud Storage module,并且还导出类型绑定以配合它。使用方便:

import * as admin from 'firebase-admin'
admin.initializeApp()
admin.storage().bucket(...)

admin.storage() 为您提供了对您尝试使用的 Storage 对象的引用。

【讨论】:

像魅力一样工作!喜欢你的教程,非常感谢! 顺便提一下,@google-cloud/storage 的 2.x 版本要求您现在执行此操作:const Storage = require(...) 我不得不使用它并将我的令牌传递给构造函数const storage = new Storage( keyFilename: "jorge-dashboard-v1-9dcf1f36dd34.json" );【参考方案2】:

如果你们使用 ES 模块方法和节点 12,仅出于知识目的,下面的 sn-p 将起作用。我无法让其他语法都不起作用~

import storagePackage from '@google-cloud/storage';
const  Storage  = storagePackage;
const storage = new Storage();

【讨论】:

【参考方案3】:

在节点 14 上,将 commonJS 与 babel 一起使用(尽管我认为 Babel 并没有干扰这里),这就是我最终在一个将 GCS 从 1.x 升级到 5.x 的旧项目中使用它的方式:

const Storage = require('@google-cloud/storage');
const gcs = new Storage(project_id);

在网络上的任何地方都没有看到这个捕获

【讨论】:

【参考方案4】:

如果您正在使用电子,但仍然无法使用上述解决方案,请试试这个。

const Storage = window.require('@google-cloud/storage');
const storage = new Storage( keyFilename: "./uploader-credentials.json" );

【讨论】:

OP 已经接受了一个答案并在comment 中写道,三年前,它已经解决了...... 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。

以上是关于Google Storage 不是构造函数错误的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:google.maps.latLng 不是构造函数[关闭]

....没有定义无参数构造函数? [复制]

Cloud Storage for Firebase 访问错误“admin.storage(...).ref 不是函数”

错误 C2512:没有合适的默认构造函数可用(不是类)

类型错误-不是构造函数[重复]

Firebase身份验证(不是函数,不是构造函数)