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" с параметром файла