Node.js 创建Google云存储桶会抛出错误

Node.js 创建Google云存储桶会抛出错误,node.js,ecmascript-6,google-cloud-storage,Node.js,Ecmascript 6,Google Cloud Storage,我的困境不是试图创建谷歌云存储桶,我可以这样做: const { Storage } = require('@google-cloud/storage'); const storage = new Storage({projectId: 'my-project', keyFilename: "key.json" }); async function createBucket() { await storage.createBucket('my-bucket'); }; createBuck

我的困境不是试图创建谷歌云存储桶,我可以这样做:

const { Storage } = require('@google-cloud/storage');
const storage = new Storage({projectId: 'my-project', keyFilename: "key.json" });
async function createBucket() {
   await storage.createBucket('my-bucket');
};
createBucket().catch(console.error);
  const  cloudStorage  = require('../src/cloudStorage');
  await cloudStorage.createGoogleBucket('my-bucket');
这很好,但这不是我调用函数来创建bucket的方式。 下面是我在一个名为cloudStorage.js的文件中创建bucket的函数:

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

 const storage = new Storage({ projectId: 'my-project', keyFilename: "key.json" });
 module.exports = {
  createGoogleBucket: async ({ bucketName }) => {
      await storage.createBucket(bucketName);
  },
};
当我这样称呼它时:

const { Storage } = require('@google-cloud/storage');
const storage = new Storage({projectId: 'my-project', keyFilename: "key.json" });
async function createBucket() {
   await storage.createBucket('my-bucket');
};
createBucket().catch(console.error);
  const  cloudStorage  = require('../src/cloudStorage');
  await cloudStorage.createGoogleBucket('my-bucket');
我得到以下错误:

   UnhandledPromiseRejectionWarning: TypeError: callback is not a function
  at C:\code\BigQueryDemo\node_modules\@google-cloud\storage\build\src\storage.js:312:17
为什么在调用函数创建bucket时会抛出此错误?如何修复它


谢谢

您收到了这条有点误导性的错误消息,因为谷歌云库认为您试图传递的是回调,而不是bucket名称。之所以会发生这种情况,是因为在此代码中:

  createGoogleBucket: async ({ bucketName }) => {
      await storage.createBucket(bucketName);
  },
({bucketName})
是一个-它试图通过访问传递给函数的第一个参数的
bucketName
属性来分配局部变量
bucketName
。在本例中,您传递的是一个字符串文本,而字符串文本没有
bucketName
属性。因此,实际上您正在将
未定义的
传递到
存储.createBucket()
。要修复此问题,只需删除括号,这样您就不会试图破坏字符串的结构:

  createGoogleBucket: async (bucketName) => {
      await storage.createBucket(bucketName);
  },

您会收到这条有点误导性的错误消息,因为google云库认为您试图传递的是回调,而不是bucket名称。之所以会发生这种情况,是因为在此代码中:

  createGoogleBucket: async ({ bucketName }) => {
      await storage.createBucket(bucketName);
  },
({bucketName})
是一个-它试图通过访问传递给函数的第一个参数的
bucketName
属性来分配局部变量
bucketName
。在本例中,您传递的是一个字符串文本,而字符串文本没有
bucketName
属性。因此,实际上您正在将
未定义的
传递到
存储.createBucket()
。要修复此问题,只需删除括号,这样您就不会试图破坏字符串的结构:

  createGoogleBucket: async (bucketName) => {
      await storage.createBucket(bucketName);
  },

你真了不起!我按照谷歌的指示创建了存储桶。我也会多读一些破坏性作业。谢谢你,你太棒了!我按照谷歌的指示创建了存储桶。我也会多读一些破坏性作业。非常感谢。