我使用 Gridfs Storage 来存储图像,并使用 multer 将图像上传到 MongoDB atlas 数据库中。 我的数据库已连接,我尝试 Postman 上传图像。但这在 multer 中显示了错误,在控制台中显示了意外的字段错误。
这里是 server.js
import express from 'express'
import mongoose from 'mongoose'
import cors from 'cors'
import multer from 'multer'
import GridsFsStorage from 'multer-gridfs-storage'
import Grid from 'gridfs-stream'
import bodyParser from 'body-parser'
import path from 'path'
import Pusher from 'pusher'
Grid.mongo=mongoose.mongo
//app config
const app=express()
const port=process.env.PORT || 8000
//middlewares
app.use(bodyParser.json())
app.use(cors())
//db config
const mongoURI='mongodb+srv://avishakcb:CiKas0n86a1A7Xsm@project350v1.kmy5r.mongodb.net/feeddb?retryWrites=true&w=majority'
const conn=mongoose.createConnection(mongoURI,{
useCreateIndex: true,
useNewUrlParser:true,
useUnifiedTopology:true
});
mongoose.connect(mongoURI,{
useCreateIndex:true,
useNewUrlParser:true,
useUnifiedTopology:true
})
mongoose.connection.once('open',()=>{
console.log('DB connected')
})
let gfs
conn.once('open',()=>{
console.log('DB Connected')
gfs=Grid(conn.db,mongoose.mongo)
gfs.collection('images')
})
const storage=new GridsFsStorage({
url:mongoURI,
file:(req,file)=>{
return new Promise((resolve,reject)=>{
const filename=`image-${Date.now()}${path.extname(file.originalname)}`
const fileInfo={
filename:filename,
bucketName:'images'
};
resolve(fileInfo);
});
}
});
const upload=multer({storage});
//api routes
app.get('/',(req,res)=>res.status(200).send('hello'))
app.post('/upload/image',upload.single('file'),(req,res)=>{
res.status(201).send(req.file)
})
//listen
app.listen(port,()=>console.log(`port ${port} is running`))
以及我在控制台日志中收到的错误。
MulterError: Unexpected field
at wrappedFileFilter (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\multer\index.js:40:19)
at Busboy.<anonymous> (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\multer\lib\make-middleware.js:114:7)
at Busboy.emit (events.js:315:20)
at Busboy.emit (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\busboy\lib\main.js:38:33)
at PartStream.<anonymous> (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\busboy\lib\types\multipart.js:213:13)
at PartStream.emit (events.js:315:20)
at HeaderParser.<anonymous> (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\dicer\lib\Dicer.js:51:16)
at HeaderParser.emit (events.js:315:20)
at HeaderParser._finish (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\dicer\lib\HeaderParser.js:68:8)
at SBMH.<anonymous> (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\dicer\lib\HeaderParser.js:40:12)
at SBMH.emit (events.js:315:20)
at SBMH._sbmh_feed (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\streamsearch\lib\sbmh.js:159:14)
at SBMH.push (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\streamsearch\lib\sbmh.js:56:14)
at HeaderParser.push (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\dicer\lib\HeaderParser.js:46:19)
at Dicer._oninfo (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\dicer\lib\Dicer.js:197:25)
at SBMH.<anonymous> (E:\Complete_web_development\TechBook\Tech_community\backend\node_modules\dicer\lib\Dicer.js:127:10)
答案 0 :(得分:1)
文件功能是否收到承诺?
file: (req, file) => {
const filename = `image-${Date.now()}${path.extname(file.originalname)}`
return {
filename: filename,
bucketName: 'images'
};
}
尽量直接退货