【问题标题】:Gridfs and mongoose file uploadGridfs 和 mongoose 文件上传
【发布时间】:2018-03-24 03:29:02
【问题描述】:

我遇到了 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
有人知道应该怎么做才能让这个东西正常工作吗?

【问题讨论】:

  • 看起来mongoose.connection.db 没有设置,你的连接字符串是什么样的?

标签: node.js mongodb mongoose gridfs gridfs-stream


【解决方案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);

【讨论】:

  • 目前我正在使用以下连接字符串:'mongodb://localhost:27017/someDb'。 (mongoose.connect('mongodb://localhost:27017/someDb'))。我从猫鼬文档中读到这是最低要求。连接也在另一个文件中完成,但如果我错了,请纠正我,这不应该对我的问题产生影响。那么在我的情况下连接字符串有问题吗?
猜你喜欢
  • 2015-01-25
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 2016-01-08
  • 1970-01-01
  • 2016-04-05
相关资源
最近更新 更多