0

我正在尝试使用 mongoose 和 GridFS 将文件写入 MongoDB。但是,gridfs writestream 不会触发任何事件 - 关闭或完成。此外,它甚至不会触发“错误事件”(以防万一有任何错误)。我的 nodejs 版本是 4.4.5 。代码如下:

var mongoose = require('mongoose');
var formidable = require('formidable'),
    http = require('http'),
    util = require('util'),
    fs = require('fs-extra');
var Regex = require("regex");
var fs = require('fs');
var path=require('path');
var grid =require("gridfs-stream");

var createRequirement = function (req, res) {
    var form = new formidable.IncomingForm({
        uploadDir: __dirname + '/upload'
    });
    form.multiples = true;
    form.keepExtensions = true;
    files = [],
    fields = [];
    form.on('field', function (field, value) {

    })

    form.on('file', function (field, file) {
            console.log(file.name);
            console.log('File uploaded : ' + file.path);
            grid.mongo = mongoose.mongo;
            var gfs = grid(db.db);
            var writestream = gfs.createWriteStream({
                filename: file.name,
                mode: 'w'
            });
            fs.createReadStream(file.path).pipe(writestream);
            //Below event is not fired.
            writestream.on('finish', function (file) {
                Company.findOne({
                    "users.userName": req.user.userName
                }).then(function (data) {
                    var company = data;
                    if (!company) {
                        return res.status(404).send({
                            'Not Found': 'Company data not found'
                        });
                    } else {

                        Contact.findByIdAndUpdate(
                            file._id, {
                                $push: {
                                    "attachments": {
                                        id: file._id
                                    }
                                }
                            }, {
                                safe: true,
                                upsert: true,
                                new: true
                            },
                            function (err, model) {
                                console.log(err);
                            }
                        );

                    }
                });
            })


});
form.parse(req);
    return;
};
4

1 回答 1

0

经过多次尝试,我可以找出解决方案。这是导致问题的猫鼬连接。gridfs-stream 需要直接的 Mongo-DB 连接。我希望他们简化了事情并促进了 Mongoose 连接的使用。

于 2017-04-29T16:19:38.417 回答