Multer не загружает файл на мой сервер, пытался в течение двух дней, игра с эффектом подковы сильна в этом - PullRequest
1 голос
/ 31 января 2020

Я не уверен, что на самом деле я сделал не так, как будто я действительно запутался, и я пытался использовать почтальон для загрузки изображений. Я оставил некоторые замечания местам, где у меня может быть ahem , облажаться.

Однако само изображение по какой-то причине не сохраняется в моей папке / public / uploads. Таким образом, файл отправляется на сервер, но не сохраняется в хранилище

Это мое приложение. js file

const fs = require('fs');
const path = require('path');

const cors = require('cors')
const multer = require('multer');
const express = require('express');
const mongoose = require('mongoose');
const keys = require('./config/keys');
const formidableMiddleware = require('express-formidable');

const productRoutes = require('./routes/products-routes');
const usersRoutes = require('./routes/users-routes');
const orderRoutes = require('./routes/orders-routes');
const HttpError = require('./models/http-error');

const app = express();
const PORT = 5000;

app.use(formidableMiddleware());
app.use(cors())

app.use('/api/places', productRoutes);
app.use('/api/user', usersRoutes);
app.use('/api/orders', orderRoutes);

//did i set this up wrongly? isn't this the path to display the image back? <------
app.use(express.static('./public'));

app.use((req, res, next) => {
  const error = new HttpError('Page you requested is invalid', 404);
  throw error;
});

mongoose
  .connect(keys.mongoURI)
  .then(() => {
    app.listen(PORT);
  })
  .catch(err => {
    console.log(err);
  });

И именно здесь я на самом деле положил мултер, но он вообще не работает

const express = require("express");
const userControllers = require('../controllers/users-controllers');
const multer = require('multer');

const router = express.Router();

const MIME_TYPE_MAP = {
     'image/png': 'png',
     'image/jpeg': 'jpeg',
     'image/jpg': 'jpg'
   };

 //I checked this a few times through a few examples, but can someone still see if I made the mistake here? <------
const upload = multer({
    storage: multer.diskStorage({
    destination: function (req, file, cb) {
    cb(null, '../public/uploads')},
    filename: function(req, file, cb){
    cb(null, file.fieldname + '-' + Date.now());
    console.log('start')
         }
     }),
    limits:{fileSize: 500000},
    fileFilter: (req, file, cb) => {
         const isValid = !!MIME_TYPE_MAP[file.mimetype];
         let error = isValid ? null : new Error('Invalid mime type!');
         cb(error, isValid);
       }
    })


//route for dashboard
router.get('/:uid', userControllers.getUser);

//route to edit dashboard
router.patch('/:uid',userControllers.updateUser);

//This one is also based on other people examples <------
router.post('/signup', upload.single("myImage"), userControllers.signUp);

//route for logging in
router.post('/login', userControllers.login);

module.exports = router;

Почтальон все равно не показывает мне ошибки, и я просто зарегистрировал сам файл, так что я знаю, что он есть в обработчике регистрации. Маршрут должен быть правильным, поскольку он регистрирует файл.

Postman - the route is correct because it's logging the file

1 Ответ

0 голосов
/ 01 февраля 2020

По какой-то причине bodyparser и грозный не разбирают мои формальные данные должным образом, переключились на подключение busboy и получили его работать

const fs = require('fs');
const path = require('path');

const cors = require('cors')
const multer = require('multer');
const express = require('express');
const mongoose = require('mongoose');
const keys = require('./config/keys');
var busboy = require('connect-busboy');
const formidableMiddleware = require('express-formidable');

const productRoutes = require('./routes/products-routes');
const usersRoutes = require('./routes/users-routes');
const orderRoutes = require('./routes/orders-routes');
const HttpError = require('./models/http-error');

const app = express();
const PORT = 5000;

const fileStorage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, './public/uploads');
  },
  filename: (req, file, cb) => {
    cb(null, file.fieldname + '-' + Date.now());
  }
});

const fileFilter = (req, file, cb) => {
  if (
    file.mimetype === 'image/png' ||
    file.mimetype === 'image/jpg' ||
    file.mimetype === 'image/jpeg'
  ) {
    cb(null, true);
  } else {
    cb('INVALID FILE!!!', false);
  }
};

const upload = multer({ storage: fileStorage }).single('myImage')

app.use(busboy());
app.use(cors())

app.use('/api/places', productRoutes);
app.use('/api/user', usersRoutes);
app.use('/api/orders', orderRoutes);

app.use(express.static('public'));

app.post('/uploads', function(req,res,next){
  upload(req,res,function(err){   
      console.log(req.file);
      if(err){
        res.json({success:false,message:err});
      }
      else{
        res.json({success:true,message:"Photo was updated !"});
      } 
  });
})

app.use((req, res, next) => {
  const error = new HttpError('Page you requested is invalid', 404);
  throw error;
});

mongoose
  .connect(keys.mongoURI)
  .then(() => {
    app.listen(PORT);
  })
  .catch(err => {
    console.log(err);
  });
...