当我尝试在 MongoDB 数据库中上传图像时,出现 multer 错误

时间:2021-01-29 08:25:37

标签: node.js mongodb express mongoose mern

我使用 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)

1 个答案:

答案 0 :(得分:1)

文件功能是否收到承诺?

file: (req, file) => {
  const filename = `image-${Date.now()}${path.extname(file.originalname)}`

  return {
    filename: filename,
    bucketName: 'images'
  };
}

尽量直接退货