반응형
const express = require('express');
const app = express();
const mongoose = require("mongoose");
const cors = require('cors');
const bodyParser = require('body-parser')
//Image Schema 이미지 데이터 스키마
const { Image } = require('./models/index.js');
const multer = require('multer')
// require('dotenv').config();
//DB 연결
mongoose.connect("mongodb://localhost:27017/image-test");
mongoose.connection.on("connected", () => {
console.log("DB connect success");
})
mongoose.connection.on("error", (err) => {
console.log(err);
})
//필요 middle-ware 연결
app.use(cors());
app.use(express.json());
//정적 파일 제공하기위한 static
//현재 '/imgaes' 의 디렉토리에 있는 정적 파일에 외부 접근을 허용한 상태
//추후 배포할 때 디렉토리 지정필요
app.use(express.static('/images'));
//req.body 사용하기 위한 bodyParser
app.use(bodyParser.json())
app.use(bodyParser.urlencoded())
app.use(bodyParser.urlencoded({ extended: true }));
app.get("/", (req, res) => {
res.send("hello!");
})
//이미지를 저장할 서버 폴더 선택
//이미지 파일은 서버에서 저장하고 DB에는 이미지에 대한 메타태그만 저장!
var storage = multer.diskStorage({
destination: (req, file, cb) => {
// console.log("dest:", req);
//서버컴퓨터의 /imgaes 디렉토리에 받은 파일 저장하겠다는 뜻
cb(null, "/images");
},
filename: (req, file, cb) => {
//파일 이름이 겹치는걸 막기 위해 Date 이용해서 구분
cb(null, `${Date.now()}_${file.originalname}`);
},
});
//"img" 는 클라이언트에서 보내는 요청 FORMDATA의 태그와 동일해야함
let upload = multer({ storage }).single("img");
// user가 이미지 업로드하는 요청
app.post("/upload", (req, res) => {
console.log("req:", req);
upload(req, res, (err) => {
if (err) {
return res.json({ success: false, err });
}
//client가 업로드하는 이미지 파일은 res.req.file 에 담긴다.
//그외 client가 부가적으로 포함해 전송하는 데이터는 res.req.body에 담긴다.
//이후에 client가 전송하는 이미지파일 + 사용자 id + .. 등등을 바탕으로 몽고db에 데이터 추가하는 것을 구현해야함
return res.json({
success: true,
image: res.req.file.path,
fileName: res.req.file.filename,
type: JSON.parse(res.req.body.type),
userId: res.req.body.userId,
});
});
});
app.listen(8010, () => {
console.log('server open');
})
'node.js > Express.js' 카테고리의 다른 글
웹서버 운영 (0) | 2022.08.04 |
---|---|
server (0) | 2022.08.01 |
express + react 연결 (0) | 2022.07.25 |
미들웨어, Router (0) | 2022.07.15 |