Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Upload Google Cloud with Node.js - Callback

Pessoal, Boa tarde!

Estou modularizando um código... e gostaria da ajuda dos Srs para entender esse problema e achar uma solução. Upload de Imagens no google cloud entre módulos, o meu cenário;

model-storage.js => arquivo responsável por fazer o upload da imagem no google storage.

'use strict';

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

const storage = Storage({
  projectId: config.get('GCLOUD_PROJECT'),
  keyFilename:  'keyfile.json'
});

const bucket = storage.bucket(config.get('CLOUD_BUCKET'));

function getPublicUrl(destination) {
    return `https://storage.googleapis.com/${config.get('CLOUD_BUCKET')}/${destination}`;
}

function uploadFile(files, destination, cb) {

    if (!files.path_ebd.path) {
        console.log('Arquivo não enviado');
        return;
    }

    let images = `${destination}/${files.path_ebd.name}`;

    bucket.upload(
        files.path_ebd.path,
        {
            public:true,
            destination: images
        }, 
        (err, file) => {
            if (err) {
                console.log(err);
                return;
            }
            file.imageURL = getPublicUrl(images)
            console.log(file);
    });
}
module.exports = {
  uploadFile
};

escola-dominical.js => Rota responsável por receber o arquivo e chamar o método de upload da imagem.

    app.post('/admin-ipp/admin/escola-dominical/save', (req, res) => {

        var form = new formidable.IncomingForm();

        form.keepExtensions = true;

        form.parse(req, function (err, fields, files) {

            var dados = fields; 
            app.persistencia.modelStorage.uploadFile(files, 'escola_dominical', (error, file) => {
                if (error) {
                    console.log(error);
                    return;
                }
                console.log('Voltei');
            });
        });
    });

Quando nessa rota faço a chamada do modulo uploadFile, a mensagem não retorna, penso que para isso é necessário implementar o callback... alguém pode ajudar a entender e uma ajuda como isso poderia ser feito?

Detalhe o upload da imagem é realizado no google cloud.

Att,

1 resposta
solução!

Segundo documentação no link https://developer.mozilla.org/pt-BR/docs/Glossario/Callback_function - Uma função callback é uma função passada a outra função como argumento, que é então invocado dentro da função externa para completar algum tipo de rotina ou ação.

Você já tem um parâmetro "cb" que pode ser usado para receber a função callback. Ao invés dos return, você pode substituir pelas chamadas da função callback.

function uploadFile(files, destination, cb) {

    if (!files.path_ebd.path) {
        console.log('Arquivo não enviado');
        cb(new Error('Arquivo não enviado'));
    }

    let images = `${destination}/${files.path_ebd.name}`;

    bucket.upload(
        files.path_ebd.path,
        {
            public:true,
            destination: images
        }, 
        (err, file) => {
            if (err) {
                console.log(err);
                cb(err);
            }
            file.imageURL = getPublicUrl(images)
            console.log(file);
            cb(null, file);
    });
}