Малтер не заполняет req.body и req.file

Я использую Multer для анализа многокомпонентной формы в среде keystone и не могу получить доступ к данным req.body и req.file внутри моего контроллера маршрута

маршруты /index.js

var keystone = require('keystone'),
    middleware = require('./middleware');

var bodyParser = require('body-parser');

//multi-part form parser for FTP api
var multer = require('multer');
var storage = multer.memoryStorage();
var upload = multer({storage: storage});

exports = module.exports = function(app) {
    app.use(bodyParser.json({limit: '10mb'}));
    app.use(bodyParser.urlencoded({limit: '10mb', extended: true}));
    app.post('/upload_api', upload.single('formFile'), routes.api.uploadFTP);
};

маршруты / API /uploadFTP.js

var keystone = require('keystone');
var ftpMod = require('ftp');
var fs = require('fs');

exports = module.exports = function(req, res) {
    console.log("req.body is ");
    console.log(req.body);
    console.log("req.file is ");
    console.log(req.file);
    res.send("console.log() outputted to screen");
}

общественности / тест-upload.html

<html>
    <body>
        <form name="sampleForm" enctype="multipart/form-data" action="/upload_api" method="post">
            <p>Method</p>
            <input type="text" name="method"><br>
            <p>Options</p>
            <input type="text" name="options"><br>
            <p>File</p>
            <input type="file" name="formFile"><br><br>
            <input type="submit" value="Click to Send">
        </form>
    </body>
</html>

Ответ, который я получаю от nodejs:

>req.body is 
{}
req.file is 
undefined

Я ожидаю req.body содержать {method: "sometext"} и req.file быть заселенным

1 ответ

Вы не можете получить значения ни в одном req.body или же req.file, Замените youe uploadFTP.js на приведенный ниже код.

var multer = require('multer');
var path = require('path');

var storage = multer.diskStorage({
  destination: function(req, file, callback) {
    callback(null, <<path where you want to store your files>>);
  },
  filename: function(req, file, callback) {
    callback(null, path.basename(Date.now() + '_' + file.originalname));
  },
});
var maxSize = 1024 * 1024;
var upload = multer({
  storage: storage,
  fileFilter: function(req, file, callback) {
    var ext = path.extname(file.originalname);
    if(ext !== '.gif' && ext !== '.jpeg') {
      return callback(res.status(202).end();, null);
    }
    callback(null, true);
  },
  limits: {fileSize: maxSize},
}).single('image');

exports = module.exports = function (req, res) {

  upload(req, res, function(err) {
    console.log(storage.diskStorage);
    if(err) {
      return res.status(201).end();
    }
    //Do stuff here
    res.status(200).end();
  });
}

Заменить строку ниже в index.js

app.post('/upload_api', upload.single('formFile'), routes.api.uploadFTP);

с

app.post('/upload_api', routes.api.uploadFTP);
Другие вопросы по тегам