Node.js - como obter o conteúdo da API do Google Drive da maneira mais rápida possível

Estou tentando criar um site com o Node.js e a API do Google Drive. Para fazer isso, depois de obter minha chave de API do google, posso acessar um link como este:

https://www.googleapis.com/drive/v3/files?q=%27{my folder ID}%27+in+parents&key={my API key}

e recebo uma resposta como esta:

{
 "kind": "drive#fileList",
 "incompleteSearch": false,
 "files": [
  {
   "kind": "drive#file",
   "id": "1MhS55q3ZmRyUxo_tPW3kqXuLIy-cAv1-",
   "name": "Capture001.png",
   "mimeType": "image/png"
  },
  {
   "kind": "drive#file",
   "id": "18y88x-DxOW4APcz6YGBFPVCeBB7eLPHC",
   "name": "contact.html",
   "mimeType": "text/html"
  },
  {
   "kind": "drive#file",
   "id": "1voNKTQv-kbyS-jJnsIXc-1OH1YudB3Xw4Dcvi6VKIqY",
   "name": "test",
   "mimeType": "application/vnd.google-apps.document"
  },
  {
   "kind": "drive#file",
   "id": "1QHbCATkynjDidEBjueVv4Qvh0ijfzV0S",
   "name": "Copy of 5737-12, 5738-01 (Freidin).mp4",
   "mimeType": "video/mp4"
  },
  {
   "kind": "drive#file",
   "id": "1u6VsnhYvvnEJlFXi_B7I-7DY4JkZP9mQ",
   "name": "Copy of 5750-01-03 Mincha-Maftir, Sicha and dollars.mpg",
   "mimeType": "video/mpeg"
  }
 ]
}

e se eu obtivesse (teoricamente) um ID de um arquivo específico, poderia inseri-lo neste URL:

https://www.googleapis.com/drive/v3/files/{my file ID}?alt=media&key={my api key}

SO Estou tentando criar um site com o node.js, que quando alguém acessa meu site / somename, esse "somename" acessa valores em um dicionário com o ID da pasta principal no Google Drive, com a chave da API e, em seguida, é capaz de acessar teoricamente todos os arquivos / pastas dessa pasta com mysite / somename / file.png ou /somename/contact.html ou algo para exibir páginas html, aqui está minha tentativa completa de código do nodejs até agora (doesn ainda não suporta subdiretórios), você pode experimentá-lo com sua própria pasta do Google Drive e chave de API, basta conectá-lo ao objeto de banco de dados:

var http = require("http");
var fetch = require("node-fetch");

var gDriveFolder = (folderID, apiKey) => `https://www.googleapis.com/drive/v3/files?q=%27${folderID}%27+in+parents&key=${apiKey}`
var gDriveFile = (fileID, apiKey) => `https://www.googleapis.com/drive/v3/files/${fileID}?alt=media&key=${apiKey}`

var database = {
        "coby": {
            "apiKey":"{paste your API key here}",
            "folder":"{paste the shared URL of your Google Drive folder here}"
        }
    }
var server = http.createServer((request, response) => {

    var urlParts = request.url.split("/").filter(x => x.length > 0).map(x => x.split("%20").join(" "));



    if(urlParts[0] != "favicon.ico") { //to not make more than neccesary requests
        var html = "";
        var json = database;
        if(json) {
            console.log("We have a JSON!", json);
            if(urlParts.length > 0) {
                var folderWentTo = urlParts[0];
                var myData = null;
                for(var k in database) {
                    if(k == folderWentTo) {
                        myData = json[k];
                        break;
                    }
                    console.log(k, ":", json[k]);
                }

            }



            if(myData) {
                var key = myData["apiKey"];
                var mainFolderURL = gDriveFolder(IDfromDriveURL(myData["folder"]),key);
                console.log("main folder: ", mainFolderURL);
                myReq(mainFolderURL, (data) => {
                    var fileList = JSONorNull(data);
                    console.log("key???",key);
                    if(fileList) {
                        var html = "<b>nothing</b><br>";
                        var f = fileList["files"];
                        if(f) {
                            if(urlParts.length > 1) {
                                var fileObject = f.filter(x=>x["name"] == urlParts[1])[0];


                                if(fileObject) {
                                    var fileID = fileObject["id"];
                                    var fileRequestedURL = gDriveFile(fileID, key);
                                    console.log("trying to get contents of ", fileRequestedURL);
                                    myReq(fileRequestedURL, (fileData) => {
                                        html = fileData;
                                        console.log(fileObject["mimeType"]);
                                     //   console.log("file: ", fileObject["name"], "'s content: ", fileData);
                                    //    response.setHeader("Content-Type",fileObject["mimeType"]);
                                        response.end(html);
                                    });
                                } else {
                                    html = "file not found!";
                                    console.log("tried to find: ", urlParts[1], " in list: ", f);

                                    response.end(html);
                                }
                            } else {
                                console.log("loaded");
                                f.forEach((y, o) => {
                                //    var fileURL = gDriveFile(y["id"], myData["apiKey"]);
                                    html += `<a href="${urlParts[0]}/${y["name"]}">${y["name"]}</a><br>`
                                });
                                response.end(html);
                                console.log("printed");
                            }

                        } else {
                            response.end(html);
                        }

                    } else {
                        response.end("this data: " + data + " went wrong");
                    }
                });
            } else {
                html = ("asdf")
                response.end(html);
            }
            console.log("url parts:", urlParts);

        } else {
            console.log("no json :(");
            response.end("dude what happened with the JSON: " + json + ", from " + bdy);
        }

    }


    });

server.listen(80);

function myReq(url, cb) {
    var start = parseInt(Date.now());
    console.log("started", start);
    fetch(url).then(res => res.text()).then(body => {
        var end = parseInt(Date.now());
        console.log("ended at",end, " total:",(end-start));
       if(cb) {

            cb(body);
       }           
    });
}

function JSONorNull(str) {
    var result = null;
    try {
        result = JSON.parse(str);
    } catch(e) {
        console.log(str, " has an error: ", e);
    }
    return result;
}

function IDfromDriveURL(url) {
    return url.split("/").length > 1 ? (url.split("/").filter(x=>x.includes("open"))).join("").replace("open?id=", "") : url;
}

o problema: atualmente estou usando node-fetch para obter o conteúdo, como você pode ver na função myReq, mas isso aparentemente está demorando muito tempo, IDK se for apenas a API do Google, mas duvido, acho é assim que estou obtendo o conteúdo ... Quando tento obter uma imagem simples de 800kb com localhost / coby / Capture1.png, ela é impressa no meu console (forma a função myReq):

started 1550048095674
ended at 1550048130691  total: 35017

isso significa que demorou 35 segundos para carregar (e baixar automaticamente) a imagem ... Também apenas para a página principal localhost / coby, o resultado é de 2500ms a 4440ms ....

SO claramente algo está errado com a API da unidade (que duvido) ou a busca de nós está agindo muito devagar ..

SO: qual é a maneira mais rápida de obter o conteúdo de uma página (e várias páginas, como o que estou fazendo) no node.js? Eu tentei o módulo de solicitação, mas também é lento e, supostamente, a busca deve ser mais rápida ...

Tente testá-lo com sua própria pasta do Google Drive e deixe-me saber se funciona rápido ou nã

ATUALIZA BTW, se eu simplesmente copiar esta função (e executá-la):

function coby2() {
    var startTime = Date.now();
    const drive_url = "https://www.googleapis.com/drive/v3/files?q=%27{my file id}%27+in+parents&key={myAPIkey}";
    let drive_request = {
        method: "GET",
        /*headers: new Headers({
            Authorization: "Bearer "+access_token
        })*/
    }
    fetch(drive_url, drive_request).then( response => {
        var txt = response.json();
        console.log(response, txt);
        return(txt);
    }).then( list =>  {
        var endTime = Date.now();
        console.log("Found files:",list.files, " with time total: ", (endTime - startTime));
    });
}

tempo de resposta @my é de cerca de 150 a 300ms e, se eu copiar exatamente a mesma função no Node.js e chamá-la na função de solicitação / resposta (na função http.createServer), a resposta ainda será de cerca de 4000ms. Eu acho que é algo com o módulo node-fetc

questionAnswers(0)

yourAnswerToTheQuestion