La difficulté w/ retour d'image aléatoire dans mon API personnalisé

0

La question

Je travaille sur mon propre api, à l'aide de l'Express et de Node JS et im de faire quelque chose qui renvoie drôle de chat images. Heres où je suis à la drôle de chat aléatoire des images.

app.get("/media/bigfootjinx", (req, res, next) => {
    let file = Math.floor(Math.random()*catarray.length)
        let fileurl = catarray[file]
        let fileimg = fetch(fileurl)
    let img = Buffer.from(fileimg, 'base64');
    res.writeHead(200, {
        'Content-Type': 'image/png',
        'Content-Length': img.length
    });
    res.end(img); 
});

Mon but est d'avoir un chat aléatoire de l'image en arrière, ils sont tous en png et des liens vers une discorde cdn. L'erreur im cesse de recevoir de est-ce.

TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received an instance of Promise
    at Function.from (buffer.js:330:9)
    at /home/runner/api/index.js:21:22
    at Layer.handle [as handle_request] (/home/runner/api/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/runner/api/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/home/runner/api/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/home/runner/api/node_modules/express/lib/router/layer.js:95:5)
    at /home/runner/api/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/home/runner/api/node_modules/express/lib/router/index.js:335:12)
    at next (/home/runner/api/node_modules/express/lib/router/index.js:275:10)
    at expressInit (/home/runner/api/node_modules/express/lib/middleware/init.js:40:5)

Je suis à l'aide d'un replit node.js projet, si quelqu'un est curieux.

http javascript node.js
2021-11-23 20:05:52
2
0

fetch est une promesse, si vous avez besoin d'attendre le téléchargement et le retour d'une goutte de réponse

app.get("/media/bigfootjinx", async (req, res, next) => {
    let file = Math.floor(Math.random()*catarray.length)
        let fileurl = catarray[file]
        let response = await fetch(fileurl)
        let fileimg = await response.blob()
    let img = await blobToBase64(fileimg);
    res.writeHead(200, {
        'Content-Type': 'image/png',
        'Content-Length': img.length
    });
    res.end(img); 
});

la conversion de blob en base64 de la fonction:

function blobToBase64(blob) {
  return new Promise((resolve, _) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result);
    reader.readAsDataURL(blob);
  });
}
2021-11-23 20:15:54

filereader est pas défini.
Noah

ah toutes mes excuses, vous devez importer un package à partir de la NGP qui permet à l'FileReader API dans un nœud de l'environnement - voici un populaire: openbase.com/js/filereader
Tevko
0

Les lignes de code suivantes sont à l'origine de l'erreur:

let img = Buffer.from(fileimg, 'base64');
let fileimg = fetch(fileurl)

L' fetch() la fonction retourne un Promise<Buffer>. Vous aurez juste à attendre pour l'extraire les résultats. Ce que vous pouvez obtenir comme ça:

let fileimg = await fetch(fileurl)
let img = Buffer.from(fileimg, 'base64');

Remarque: Votre fonction de rappel pour obtenir le point de terminaison doit être asynchrone:

app.get("/media/bigfootjinx", async (req, res, next) => {
2021-11-23 20:21:13

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................