Невозможно сохранить загруженное изображение в базу данных в Hapi.js - PullRequest
5 голосов
/ 02 мая 2019

Я хочу сохранить загруженную фотографию в mongodb, используя hapi.js.Но я могу загрузить фотографию в папку для загрузки, но я не смог сохранить ее в базе данных.Это код:

   server.route({
            method: 'POST',
            path: '/upload',
            config: {
                    payload: {
                        output: "stream",
                        parse: true,
                        allow: "multipart/form-data",
                        maxBytes: 2 * 1000 * 1000
                    }
                },

                  handler: async (req, h) => {

                    const response1 = handleFileUpload(req.payload.image);
                    console.log(response1);
                    return response1;

                  }
         });
const handleFileUpload = file => {
    return new Promise((resolve, reject) => {
      const filename = file.hapi.filename
      const data = file._data

      fs.writeFile(`./uploads/${filename}`, data, err => {
        if (err) {
          reject(err)
        }
        resolve({
          message: 'Upload successfully!',
          imageUrl: `${server.info.uri}/uploads/${filename}`
        })
      })
    })
  }

Поскольку он отправляет ответное сообщение и imageUrl.Я должен сохранить этот imageurl на БД, но я не знаю, как получить доступ к нему из возврата обещания.Я очень новый, чтобы обещать.это моя модель схемы:

const stuSchema = new Schema({
    image : String,
});

html:

   <form method="post" action="/upload" enctype="multipart/form-data">

            <label for="image">Image Upoahhd</label>
            <input name="image" type="file" required >

            <br><br>
            <input type="submit" value="Login">
        </form>

Я не знаю, как сохранить значение req.payload.image в базе данных.Я хотел сделать это следующим образом для метода обработчик :

const user = new User (imageUrl);
const sav = user.save();
return h.response(sav)

Но я хотел написать их в функции распознавателя, но он принимает объекты

1 Ответ

0 голосов
/ 02 мая 2019

Вам необходимо использовать await с функцией handleFileUpload, чтобы получить данные от объекта Promise, а затем под ним можно использовать функцию save() для создания документа в базе данных.

handler: async (req, reply) => {
  try {
    const { imageUrl } = await handleFileUpload(req.payload.image);
    const user = new User ({ image: imageUrl });
    const result = user.save();
    return ({ message: 'Saved Successfully' });
  } catch (err) {
    throw err
  }
}

const handleFileUpload = file => {
  return new Promise((resolve, reject) => {
    const filename = file.hapi.filename;
    const data = file._data;

    return fs.writeFile(`./uploads/${filename}`, data, err => {
      if (err) {
        return reject(err)
      }
      return resolve({
        message: "Upload successfully!",
        imageUrl: `${server.info.uri}/uploads/${filename}`
      })
    })
  })
}
...