数据库连接文件
const mongoose = require('mongoose');
const multer = require('multer')
const {GridFsStorage} = require('multer-gridfs-storage')
const Grid = require('gridfs-stream');
const path = require('path');
const dotenv = require('dotenv');
const crypto = require('crypto')
dotenv.config( { path : 'config.env'} )
let storage;
exports.connectDB = ()=>{
try{
const con = mongoose.createConnection(process.env.MONGO_URL,{
useNewUrlParser:true,
useUnifiedTopology:true,
})
con.once('open', () => {
// Init stream
const gfs = Grid(con.db, mongoose.mongo);
gfs.collection('uploads');
});
console.log(`MongoDB connected:${con}`)
}catch(err){
console.log(err);
process.exit(1);
}
}
exports.createStorage = ()=>{
storage = new GridFsStorage({
url: process.env.MONGO_URL,
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);
});
});
}
});
console.log('storage created')
}
exports.upload = multer({storage})以上传为中间件发布请求
route.post('/example',database.upload.single('file'),async (req,res)=>{
res.json({file:req.file})
})当我用postman做一个post请求时,没有错误,但是文件没有在MongoDB上上传,也没有创建上传集合。
我打电话给connectDB和createStorage从index.js
database.connectDB();
database.createStorage();发布于 2022-04-20 13:53:29
我解决了。问题是
exports.upload = multer({storage})之前执行了这一行代码。
database.createStorage();所以解决办法是
exports.createStorage = ()=>{
storage = new GridFsStorage({
url:process.env.MONGO_URL,
// db:conn.connection.db,
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);
});
});
}
});
exports.upload = multer({storage})
}https://stackoverflow.com/questions/71901776
复制相似问题