Запросить файл изображения и json файл на сервере? - PullRequest
0 голосов
/ 14 февраля 2020

Я новичок в узлах и реагирую, я строил API-интерфейсы для своих приложений. Я хочу добавить человека в базу данных с информацией json, а также URL-адрес загруженного изображения с busboy. Но я не могу понять, как это сделать, вы можете мне помочь? Это моя почтовая функция; e

xports.postGobohead = (req, res) => {
 const noImg = "no-img.jpg";

 const newGobohead = {
 handle: req.body.handle,
 imageUrl: `https://firebasestorage.googleapis.com/v0/b/${config.storageBucket}/o/${noImg}?alt=media`,
 skills: req.body.skills,
 email: req.body.email,
 tel: req.body.tel,
 title: req.body.title,
 experience: req.body.experience,
 twitter: req.body.twitter,
 facebook: req.body.facebook,
 linkedin: req.body.linkedin,
 instagram: req.body.instagram,
 resume: req.body.resume
  };

 db.collection("goboheads")
    .add(newGobohead)
    .then(doc => {
 const resGobohead = newGobohead;
 resGobohead.goboId = doc.id;
 return res.json(resGobohead);
    })
    .catch(err => {
 res.status(500).json({ error: "Birşeyler yanlış gitti" });
 console.error(err);
    });
};

Я установил другую функцию, которая обновляет первый "no-img" imageUrl. Но я хочу загрузить картинку в первую очередь. Это моя функция загрузки;

exports.uploadImage = (req, res) => {
 const BusBoy = require("busboy");
 const path = require("path");
 const os = require("os");
 const fs = require("fs");

 const busboy = new BusBoy({ headers: req.headers });

 let imageToBeUploaded = {};
 let imageFileName;

 busboy.on("file", (fieldname, file, filename, encoding, mimetype) => {
 if (mimetype !== "image/jpeg" && mimetype !== "image/png") {
 return res.status(400).json({ error: "Wrong file type submitted" });
    }

 //my.image.png => ['my','image','png']
 const imageExtension = filename.split(".")[filename.split(".").length - 1];
 //56465465845465.png
 imageFileName = `${Math.round(Math.random() * 1000000000000).toString()}.${imageExtension}`;
 const filepath = path.join(os.tmpdir(), imageFileName);
 imageToBeUploaded = { filepath, mimetype };
 file.pipe(fs.createWriteStream(filepath));
  });

 busboy.on("finish", () => {
 admin
      .storage()
      .bucket()
      .upload(imageToBeUploaded.filepath, {
 resumable: false,
 metadata: {
 metadata: {
 contentType: imageToBeUploaded.mimetype
          }
        }
      })
      .then(() => {
 const imageUrl = `https://firebasestorage.googleapis.com/v0/b/${config.storageBucket}/o/${imageFileName}?alt=media`;
 return db.doc(`/users/${req.user.handle}`).update({ imageUrl });
      })
      .then(() => {
 return res.json({ message: "image upload succesfully" });
      })
      .catch(err => {
 console.error(err);
 return res.status(500).json({ error: err.code });
      });
  });
 busboy.end(req.rawBody);
};

Так что, в основном, я пытаюсь заменить imageUrl на imageUrl функций uploadimage и поместить шаги busboy в функцию post. Но я не могу понять, как отправить запрос, и я пробую несколько данных формы, но я получил сообщение об ошибке: «Значение для аргумента« данные »не является допустимым документом Firestore. Невозможно использовать« undefined »в качестве значения Firestore (находится в поле»). "ручка") "Так что я застрял.

...