MERN 앱에서 multer를 사용하여 로컬 데이터베이스에 저장된 클라이언트 측 이미지에 액세스하려고합니다. 내 백엔드 폴더의 구조는 다음과 같습니다.
--- api
--- controllers
--- model
--- routes
--- config
--- db.js
--- appConfig.js
--- utils
--- uploads
--- multerMiddleware.js
--- app.js
로컬 DB에 이미지 업로드 및 저장이 완벽하게 작동합니다. 새 데이터가 생성되면 API 응답에서 클라이언트가 수신 한 데이터에 업로드 된 이미지의 URL이 포함되어 다시 액세스 할 수 있습니다 (예 : 이미지 썸네일 표시).
내 코드는 다음과 같습니다.
App.js
const express = require("express");
const path = require('path');
const app = express();
const directory = path.join(__dirname, '/uploads');
app.use('/uploads', express.static(directory));
require("./config/db/db")();
require("./config/appRoutes/appRoutes")(app);
module.exports = app;
multerFile.js
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + '/uploads')
},
filename: function (req, file, cb) {
const fileName = file.originalname.toLowerCase().split(' ').join('-');
cb(null, fileName);
}
});
const upload = multer({
storage
});
module.exports = upload;
제어 장치
exports.createService = async (req, res) => {
const service_name = req.body.main_name;
const url = req.protocol + '://' + req.get('host');
let service_pic;
if (req.file) {
service_pic = url + '/utils/uploads/' + req.file.filename;
}
try {
const service = new Services({
_id: new mongoose.Types.ObjectId(),
service_name,
service_pic
});
const new_service = await service.save();
res.status(201).json({ message: "New data created", result: new_service });
} catch (error) {
console.log(error);
res.status(500).json({ message: "Internal server error", error });
}
}
경로를 사용하여 http://localhost:5000/services/all
JSON 데이터를 다음과 같이 얻습니다.
{
createdAt: "2020-09-07T08:25:11.581Z"
service_name: "TEST"
service_pic: "http://localhost:5000/utils/uploads/testio-logo-rgb1.png"
updatedAt: "2020-09-07T08:25:11.581Z"
}
에 액세스하려고 http://localhost:5000/utils/uploads/testio-logo-rgb1.png
하면 항상 오류가 반환 "error":{"message":"Route Not found"}}
됩니다.. 이미지가 /uploads
폴더 에 제대로 저장 되지만 클라이언트에서 여전히 액세스 할 수 없습니다.
무슨 일이 일어나고 있는지 잘 모르겠습니다. 이 문제를 해결하는 데 도움을 주시면 감사하겠습니다.
변경 '/uploads'
에'utils/uploads'
// app.js
const directory = path.join(__dirname, 'utils/uploads');
app.use('/uploads', express.static(directory));
이 코드 블록은에서 엔드 포인트를 제공하는 정적 자산을 설정했습니다 /uploads
. 요청이이 엔드 포인트에 도달 할 때마다 서버는 폴더를 찾습니다 /utils/uploads
.
예제 요청은 다음과 같습니다.http://localhost:5000/uploads/testio-logo-rgb1.png
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다