반응형
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

+ Recent posts