Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用gridfs和mongoose在mongodb中存储文件_Javascript_Node.js_Mongodb_Mongoose_Gridfs - Fatal编程技术网

Javascript 使用gridfs和mongoose在mongodb中存储文件

Javascript 使用gridfs和mongoose在mongodb中存储文件,javascript,node.js,mongodb,mongoose,gridfs,Javascript,Node.js,Mongodb,Mongoose,Gridfs,我有以下代码 js具有以下用于写入文件字节的代码 exports.putFile = function(path, name, options, fn) { var db; db = mongoose.connection.db; options = parse(options); options.metadata.filename = name; return new GridStore(db, name, "w", options).open(func

我有以下代码

js具有以下用于写入文件字节的代码

exports.putFile = function(path, name, options, fn) {
    var db;
    db = mongoose.connection.db;
    options = parse(options);
    options.metadata.filename = name;
    return new GridStore(db, name, "w", options).open(function(err, file) {
        if (err) {
            return fn(err);
        }
        return file.writeFile(path, fn);
    });
};
猫鼬模式定义如下。mongoose模式有一个文件名和文件本身

var fs = require('fs');
var mongoose = require('mongoose');
var db = mongoose.connection;
var gridfs = require('./gridfs');
var Schema = mongoose.Schema;

var trackDocsSchema = mongoose.Schema(
        {
            _id : Schema.Types.ObjectId,
            docName: 'string',
            files: [ mongoose.Schema.Mixed ]
        }
);

trackDocsSchema.methods.addFile = function(file, options, fn) {
    var trackDocs;
    trackDocs = this;
    return gridfs.putFile(file.path, file.name, options, function(err, result) {
        if (err) console.log("postDocsModel TrackDocs Error: " + err);

        trackDocs.files.push(result);
        return trackDocs.save(fn);
    });
};

var TrackDocs = mongoose.model("TrackDocs", trackDocsSchema);
下面是调用的服务器代码

exports.uploadFile = function (req, res) {
    console.log("uploadFile invoked");
          var trackDocs, opts;
        trackDocs = new TrackDocs();
        trackDocs._id = mongoose.Types.ObjectId(req.body._id);
        trackDocs.docName = req.body.docName;
        opts = {
            content_type: req.files.file.type
        };

        return trackDocs.addFile(req.files.file, opts, function (err, result) {
            if (err) console.log("api TrackDocs Error: " + err);

            console.log("Result: " + result);
            trackDocs.save();
            console.log("Inserted Doc Id: " + trackDocs._id);
            return res.json(true);
        });
    };
});
当我运行下面的代码时,我得到一个错误

api TrackDocs错误:RangeError:超出了最大调用堆栈大小,没有向GridFS添加任何内容。但是,如果我再次上传相同的文件,它会将其保存到GridFS中

请注意,有两个trackDocs.save。我不确定这是导致问题还是其他原因

我是NodeJS和Mongoose的新手,所以任何帮助都将不胜感激

谢谢,
梅尔罗伊

不确定这是否有帮助,但它在过去帮助过我

毫不奇怪,不同的浏览器具有不同的调用堆栈大小。同样毫不奇怪,他们用来确定调用堆栈的方法也各不相同。我可以测量的各种调用堆栈大小有(给定或获取,可能为1或2):

我们自己运行了一些测试,以便使用以下简单代码获得其他浏览器/主机/操作系统上的调用堆栈大小:

var i = 0;

function recurse () {
    i++;
    recurse();
}

try {
    recurse();
} catch (ex) {
    alert('i = ' + i + '\nerror: ' + ex);
}

表示一个选项可以将
--max stack size
传递给节点

设置最大v8堆栈大小(字节)

node——最大堆栈大小32000 app.js


注意:帮助将其打印为
--max stack size
,在
节点-v
v0.10.x+
中,您需要改用
--stack size

这有什么进展吗?哪一行引发了该异常?一个潜在的解决方法(不是真正的解决方案)是增加堆栈大小。您可以在调用脚本
节点--stack size=32000 app.js
时执行此操作,您如何处理文件上载?用强大的或其他的自由?你解决你的问题了吗?我需要做一些类似的事情,在Mongo中存储二进制文件。