将 Multer 集成到我的存在路由器和控制器结构问题的 express 后端

Integrating Multer into my express backend that has router and controller structure issue

我正在为我的一个项目构建后端。我目前有 server/routers/controllers 后端设置。我正在创建我的项目的配置文件部分。当用户提交他的个人资料时,我有我试图保存的个人资料图片。个人资料的一部分是个人资料图片。我目前正在将个人资料图片从反应前端发送到快递后端。文件发送正确,但提交时我在将图像保存到本地服务器时遇到问题。

我目前正在尝试将 multer 集成到项目中,但它没有存储任何内容,而且由于缺乏文档,我无法理解如何集成它。我确实有路由器和控制器设置,这让它变得更加棘手。有人可以帮忙...这是代码

服务器:

...
const path = require('path');
const multer = require('multer');
const fileUpload = require('express-fileupload');

const app = express();
const upload = multer({dest:'../../client/static/images/ProfilePictures'})
...
app.use(cors());
app.use(cookieParser())
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended : true }));
app.use(session({
  secret: 'helloworld',
  cookie: {maxAge: 60000},
  saveUninitialized: false,
}))
app.use(morgan('dev'))
app.use(fileUpload());
...
app.use('/api/auth', AuthenticationRouter)
app.use('/api/user', UserRouter)
app.use('/api/profile', ProfileRouter)

路由器:

const router = require("express").Router()
const profileController = require("../../controllers/UserControllers/ProfileController.js");

router
  .route('/')
  .get(profileController.get)
  .post(profileController.post)
  .delete(profileController.delete)
  .patch(profileController.patch)

module.exports = router;

控制器:

const Profile = require("../../models/UserModels/Profiles.js")
const User = require('../../models/UserModels/Users.js')
...
  post:(req, res) => {
    console.log(req.files.profile_pic.name)
    let body = req.body
    let file = req.files.profile_pic
    Profile.create({
      profile_pic: file.name,
      f_name: body.f_name,
      l_name: body.l_name,
      bio: body.bio,
      location: body.location,
      sm_facebook: body.sm_facebook,
      sm_instagram: body.sm_instagram,
      sm_twitter: body.sm_twitter,
      sm_website: body.sm_website,
      followers: body.followers,
      following: body.following,
      photos: body.photos,
      downloads: body.downloads,
      edits: body.edits,
      userId: body.userId
    })
    .then((data) => {
      res.send(data).status(200)
    })
    .catch((err) => {
      console.error(err)
      res.send(err).status(400)
    })
  },

如果我使用路由器和控制器,如何集成上传。所有示例仅在一个页面上显示了整个服务器处理过程,这是有道理的。但是像这样分解后什么也没有显示

Express 允许为每个路由定义多个处理程序。因此,您可以在从控制器设置处理程序之前简单地添加 multer 中间件。所以在 Router.js 中,你可以这样做:

const multer = require('multer');
const upload = multer({dest:'<TBD>'});

const router = require("express").Router();
const profileController = require("../../controllers/UserControllers/ProfileController.js");
    
router
  .route('/')
  .get(profileController.get)
  .post(upload.single("<TBD>"), uploadprofileController.post)
  .delete(profileController.delete)
  .patch(profileController.patch)

module.exports = router;

同时使用 express-fileuploadmulter 也没有多大意义。通过上述 multer 用法,我将摆脱 express-fileupload.