将 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-fileupload
和 multer
也没有多大意义。通过上述 multer 用法,我将摆脱 express-fileupload
.
我正在为我的一个项目构建后端。我目前有 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-fileupload
和 multer
也没有多大意义。通过上述 multer 用法,我将摆脱 express-fileupload
.