使用GridFS在MEAN堆栈中上传文件:获取错误

时间:2015-04-23 14:21:09

标签: javascript angularjs mongoose mean gridfs

干杯配偶!
我正在尝试使用GridFS在MEAN Application中上传文件。我正在使用这个教程http://www.codetutorial.io/file-upload-gridfs-mean-stack-meanjs/

实施并检查十次后,我仍然会在TypeError: Cannot read property "filefield" of undefined中收到此错误:upload.server.controller.js。但在我看来,文件字段正确传递给路由和控制器。

这是我的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();
};

有人知道如何解决这个错误吗?
来自德国的问候,
大卫

2 个答案:

答案 0 :(得分:0)

您可能忘记在index.js文件中包含一个正文解析器:

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

没有它,req对象中没有文件。

答案 1 :(得分:0)

你可能已经放置了

  app.use(busboyBodyParser()); 

最后。尽量把它放在上面。它会起作用。