0

我遇到了gridfs文件上传的问题。基本上我得到了这个奇怪的错误,我还没有找到解决这个问题的解决方案。

这是我应该处理文件上传的代码:

var path = require('path');
var router = require('express').Router();
var mongoose = require('mongoose');
var serverConfig = require('../config.js');
var multiparty = require('connect-multiparty')();
var fs = require('fs');
var GridFs = require('gridfs-stream');


var db = mongoose.connection.db;
var mongoDriver = mongoose.mongo;
var gfs = new Gridfs(db, mongoDriver);

router.post('/upload', multiparty, function(req, res){
    console.log("file was posted");
    var writestream = gfs.createWriteStream({
        filename: req.files.file.name + Date.now(),
        mode: 'w',
        content_type: req.files.file.mimetype,
        metadata: req.body
    });
    fs.createReadStream(req.files.file.path).pipe(writestream);
    writestream.on('close', function(file){
        res.status(200).json(file);
    })
})

尝试运行我的代码时,出现此错误:

if (!db) throw new Error('missing db argument\nnew Grid(db, mongo)');
           ^

Error: missing db argument
new Grid(db, mongo)

我正在使用 Mongoose 版本 4.11.12 和 Gridfs-stream 版本 1.1.1
有人知道应该怎么做才能让这个东西正常工作吗?

4

1 回答 1

1

看起来mongoose.connection.db没有提取数据库名称,因为它可能在连接字符串中丢失,您的连接字符串应该看起来像'mongodb://username:password@host:port/database?options...'数据库是您要连接的数据库的位置。

或者你可以替换

var db = mongoose.connection.db;
var mongoDriver = mongoose.mongo;
var gfs = new Gridfs(db, mongoDriver);

var mongoDriver = mongoose.mongo;
var gfs = new Gridfs("myDatabase", mongoDriver);
于 2017-10-12T09:12:13.080 回答