2015-04-23 3 views
0

Приветствия!
Я пытаюсь загрузить файл в своем MEAN Application с помощью GridFS. Я использую этот учебник http://www.codetutorial.io/file-upload-gridfs-mean-stack-meanjs/.Загрузка файла в MEAN Stack with GridFS: Получение ошибок

После внедрения и проверки его десять раз, я до сих пор получаю эту ошибку: TypeError: Cannot read property "filefield" of undefined в upload.server.controller.js. Но мне кажется, что файловое поле правильно передается маршруту и ​​контроллеру.

Here's мой HTML форма:

<form action="/upload/" method="post" enctype="multipart/form-data"> 
<input type="file" name="filefield"> 
<button type="submit">Hochladen</button> 
</form> 

Маршрут:

var upload = require ('./controllers/upload.server.controller'); 
app.route('/upload/:filename') 
    .get(upload.read); 
app.route('/upload/') 
    .post(upload.create); 

И создать-часть контроллера:

'use strict'; 

var mongoose = require('mongoose'), 
    _ = require ('lodash'); 
var Grid = require('gridfs-stream'); 
Grid.mongo = mongoose.mongo; 
var gfs = new Grid(mongoose.connection.db); 

exports.create = function(req, res) { 

    var part = req.files.filefield; 

    var writeStream = gfs.createWriteStream({ 
     filename: part.name, 
     mode: 'w', 
     content_type:part.mimetype 
    }); 

    writeStream.on('close', function() { 
     return res.status(200).send({ 
      message: 'Success' 
     }); 
    }); 

    writeStream.write(part.data); 

    writeStream.end(); 
}; 

Кто-нибудь понял, как исправить эту ошибку?
С наилучшими пожеланиями из Германии,
Дэвид

ответ

0

Возможно, вы забыли включить анализатор тела в вашем index.js файла:

busboyBodyParser = require('busboy-body-parser'), 
app.use(busboyBodyParser()); 

Без него не существует никаких файлов в объекте REQ.

+0

Грустно сказать, но есть автобус и работает –

+0

Можете ли вы отлаживать или console.log, что находится в req.files? – vanadium23

+0

Я положил console.log (req.files); прямо над var part = req.files.filefield, где я получаю свою консольную ошибку. Получение «undefined» –

0

Вы, возможно, поставил

app.use(busboyBodyParser()); 

в конце. Попытайтесь разместить его сверху. Это будет работать.