我正在使用grid-stream和girdFsStorage库从mongodb获取图像。
我将图像上传到db是可以的,但是当我尝试从db获取图像时失败了。
我期望db.collection位于gfs.files.findOne({ filename: req.params.filename }, (err, file) => {...}
但是,将返回this.db.collection。
有什么想法吗?
TypeError:this.db.collection不是函数
这是我的数据库连接
let db = mongoose.connect(init.mongoUrl)
.then(() => console.log('Connected to MongoDB...'))
.catch(err => console.error(('Could not connect to MongoDB...\n'), err))
这是我从db获取图像的代码
// Init stream
const gfs = Grid(db, mongoose.mongo);
api.get('/image/:filename', (req, res) => {
gfs.files.findOne({ filename: req.params.filename }, (err, file) => {
// Check if file
if (!file || file.length === 0) {
return res.status(404).json({
err: 'No file exists'
});
}
// Check if image
if (file.contentType === 'image/jpeg' || file.contentType === 'image/png') {
// Read output to browser
const readstream = gfs.createReadStream(file.filename);
readstream.pipe(res);
} else {
res.status(404).json({
err: 'Not an image'
});
}
});
});
答案 0 :(得分:0)
那是因为我没用
gfs.collection('uploads');
.once('open',()=> {...})
// Init gfs
let gfs;
conn.once('open', () => {
// Init stream
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection('uploads');
});
您可以在这里看到我的示例: https://github.com/qkreltms/mongodb_simple_file_upload_to_db_example/blob/master/app.js
关于.collection(): https://github.com/aheckmann/gridfs-stream/blob/c394e050d066a5c81c6dcdddad186b08a93d5f1f/lib/index.js#L75