mongoose - GridFS - слишком большие данные?

У меня есть база данных MongoDB, и я хочу писать / читать файлы в ней и из нее.

var express = require("express");
var app = express();
var mongoose = require("mongoose");
var logger = require("morgan");
var busboyBodyParser = require("busboy-body-parser");
var router = require("express").Router();
var fs = require("fs");

var Grid = require("gridfs-stream");
var conn = mongoose.connection;
Grid.mongo = mongoose.mongo;

app.use((req, res, next) => {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,POST");
    res.header("Access-Control-Allow-Headers", "Content-Type, Authorization");
    next();
});

app.use(logger("dev"));
app.use(busboyBodyParser());


conn.once("open", function(){

    var gfs = Grid(conn.db);

    app.get("/", function(req, res){
        res.send("root page");
    });

    app.get("/file/:filename", function(req, res){
        var filename = req.params.filename;
        gfs.files.find({
            filename: filename
        }).toArray((err, files) => {

            if(files.length === 0){
                return res.status(404).send({
                    message: "File not found"
                });
            }

            var data = [];
            var readstream = gfs.createReadStream({
                filename: files[0].filename
            });

            readstream.on("data", function(chunk){
                data.push(chunk);
            });

            readstream.on("end", function(){
                data = Buffer.concat(data);
                res.end(data);
            });

            readstream.on("error", function(err){
                res.status(500).send(err);
                console.log("An error occurred!", err);
            });
        });
    });

    app.post("/file", function(req, res){
        var part = req.files.file;
        console.log(part);
        var writeStream = gfs.createWriteStream({
            filename: part.name,
            mode: "w",
            content_type: part.mimetype
        });

        writeStream.on("close", function(file){
            if(!file){
                res.status(400).send("No file received");
            }
            return res.status(200).send({
                message: "Success",
                file: file
            });
        });
        writeStream.write(part.data, function(){
            writeStream.end();
        });
    });
});



mongoose.connect("mongodb://localhost/gridFS").then(function(){
    console.log(`[*] Connected to Database`);
}).catch(function(err){
    console.log(`[*] Error while connecting to DB, with error: ${err}`)
});


app.listen(3000, function(){
console.log("Listening ..");
});

Этот скрипт хорошо работает с файлами размером ~ 150 Мб, но над ним он показывает эту ошибку:

POST /file 500 18626.785 ms - 1698
TypeError: May not write null values to stream
    at validChunk (_stream_writable.js:250:10)
    at GridWriteStream.Writable.write (_stream_writable.js:288:21)
    at C:\Users\Administrator\Desktop\app.js:82:15
    at Layer.handle [as handle_request] (C:\Users\Administrator\Desktop\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Administrator\Desktop\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\Administrator\Desktop\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\Administrator\Desktop\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\Administrator\Desktop\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\Administrator\Desktop\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\Administrator\Desktop\node_modules\express\lib\router\index.js:275:10)
    at Busboy.<anonymous> (C:\Users\Administrator\Desktop\node_modules\busboy-body-parser\index.js:76:17)
    at emitNone (events.js:110:20)
    at Busboy.emit (events.js:207:7)
    at Busboy.emit (C:\Users\Administrator\Desktop\node_modules\busboy\lib\main.js:38:33)
    at C:\Users\Administrator\Desktop\node_modules\busboy\lib\types\multipart.js:52:13
    at _combinedTickCallback (internal/process/next_tick.js:131:7)

я не знаю почему.

Я много гуглил, но не нашел решения.

Я подумал, может быть, переполненный пух или что-то вроде этого, но я не могу найти что-то.

это происходит, когда я запрашиваю " http://127.0.0.1/file" с параметром файла

0 ответов

Другие вопросы по тегам