Ошибка администратора хранилища Firebase: 400 неверное имя корзины - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь использовать функции firebase для обслуживания своей базы данных и хранилища.В основном удалите некоторые старые записи из одного ref / bucket в другой после истечения срока их действия.Часть базы данных прекрасно работает.Однако части хранения не так уж много.Вот как я инициализирую все в своем коде:

var functions = require('firebase-functions');
var admin = require("firebase-admin");
var serviceAccount = require('./my-app-bla-bla.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: 'https://my-app.firebaseio.com',
  storageBucket: 'gs://my-app.appspot.com'
});

Затем в задании cron, который очищает базу данных и хранилище, у меня есть следующее (это только небольшая соответствующая часть):

const st = admin.storage();

st.bucket("gs://my-app.appspot.com/old-listings/"+listingKey).create(function(error, bucket, apiResponse) {
    if (error) {
        console.log("Couldn't create an OldListing bucket: " + error.code);
        console.log(apiResponse);
    } else {
        console.log("Created OldListing bucket");
    }
});

Этот последний фрагмент кода вызывает ошибку и выдает мне следующий журнал:

Couldn't create an OldListing bucket: 400
{ error: 
   { errors: [ [Object] ],
     code: 400,
     message: 'Invalid bucket name: \'my-app.appspot.com/old-listings/SomeUniqueID\'' } }

Поскольку я запускаю этот код в первый раз, папка old-listings еще не существует.Поэтому я подумал, что, может быть, мне стоит сначала создать его ведро.Это выдает мне ту же ошибку.

Я также пытался использовать сегменты без ссылки gs, например, st.bucket("old-listings/"+listingKey) вместо st.bucket("gs://my-app.appspot.com/old-listings/"+listingKey).Все равно выдает мне ту же ошибку.

так что именно здесь не хватает?Что я делаю не так?

Редактировать 1

Я попытался добавить следующий фрагмент кода в начале своей функции cron.Чтобы лучше понять, что происходит.

admin.storage().bucket("my-app.appspot.com").exists(function(error, exists) {
    if (!error) {
        if (exists) {
            console.log("Top Bucket Exists");
        } else {
            console.log("Top Bucket Does Not Exist");
        }
    } else {
        console.log("Top Bucket Error " + error.code);
    }
});

admin.storage().bucket("my-app.appspot.com/listings").exists(function(error, exists) {
    if (!error) {
        if (exists) {
            console.log("Listings Bucket Exists");
        } else {
            console.log("Listings Bucket Does Not Exist");
        }
    } else {
        console.log("Listings Bucket Error " + error.code);
    }
});

В моем журнале я получаю следующее:

Top Bucket Exists
Listing Bucket Error undefined

Конечно, у меня уже есть папка с именем listings в моей базе данных.место хранения.Так почему же второе ведро будет неопределенным?

1 Ответ

0 голосов
/ 26 ноября 2018

Когда вы строите имя в корзину, в нем не должно быть компонентов пути к файлу, это должно быть просто уникальное имя корзины - контейнера для всех ваших объектов.Если вы хотите сослаться на файл в корзине, используйте метод file () для объекта корзины, чтобы получить объект File для работы.

const st = admin.storage();
const bucket = st.bucket('name-of-your-bucket');
const file = bucket.file('name-of-your-file');
...