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