javascript - 卡住错误:Typeerror:grid.mongo.objectID is not a constructor
问题描述
我试图将图像上传到 mongodb 数据库。然后得到这个我无法解决的错误。有人可以帮忙吗!
所有 require 语句后的代码如下所示
// MONGOOSE CONNECTION
const conn = mongoose.createConnection(mongoURI);
// GRID FS
let gfs;
conn.once('open' , ()=>{
// init stream
gfs = Grid(conn.db , mongoose.mongo);
gfs.collection('uploads');
});
// MULTER
const storage = new GridFsStorage({
url: mongoURI,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString('hex') + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: 'uploads'
};
resolve(fileInfo);
});
});
}
});
const upload = multer({storage}).single('file');
然后当我尝试使用 gfs.file.find() 显示保存在数据库中的文件对象时,它起作用了
app.get("/files/:filename" , (req , res)=>{
gfs.files.findOne({filename : req.params.filename} , (err , file)=>{
if(!file){
return res.json({err : "No file exists"});
}
return res.json(file)
})
});
上面的代码工作并在调用时显示了 json 对象。但是,当尝试使用 createReadStream 将图像显示为不是 json 而是显示为实际图像时,它就坏了
app.get("/image/:filename" , (req , res)=>{
gfs.files.findOne({filename : req.params.filename} , (err , file)=>{
if(!file){
return res.json({err : "No file exists"});
}
// file exists
// if it is an 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"});
}
});
});
解决方案
推荐阅读
- python - 在 Python 中使用 netCDF4 读取变量时如何指定精度?
- android - onCreateView 出现空指针异常错误
- python - 如何使用凭据登录网站 https://www.flipkart.com/
- sql - 如何比较共享另一列的相同值的两行之间的列值?
- xamarin - 在 Xamarin Forms 中点击本地通知时如何重定向到页面?
- python - 在 Databricks 中使用 python 获取 SAS 密钥以连接 eventthub
- excel - 如何根据Excel中的另一列值计算一列的值?
- jquery - mysql 查询 - 如何在 where 上写 if 条件
- sql-server - 执行存储在表中的查询,无需循环
- excel - Excel,增加时间序列找到相邻点之间的平均时间