728x90
서버쪽은 자세히 공부하지못해 진행중에 하나하나 주석처리함...
const express = require("express");
const cors = require("cors");
const app = express();
// 헤로쿠에서 지정한 포트가 있으면 그 번호를 사용
// 없다면 8080 포트를 사용한다.
const port = process.env.PORT || 8080;
const models = require('./models');
//json형식의 데이터를 처리할수 있게 설정
app.use(express.json());
//브라우저 cors이슈를 막기위해 사용(모든 브라우저의 요청을 일정하게 받겠다)
app.use(cors());
//upload폴더에 있는 파일에 접근할수 있도록 설정
app.use("/upload", express.static("upload"));
//업로드 이미지를 관리하는 스토리지 서버를 연결 -> 멀터를 사용하겠다.
const multer = require("multer");
//이미지 파일이 요청오면 어디에 저장할건지 지정
const upload = multer({
storage: multer.diskStorage({
destination: function(req, file, cb){
//어디에 저장할거냐? upload/
cb(null, 'upload/')
},
filename: function(req, file, cb){
//어떤 이름으로 저장할거야?
//file객체의 오리지널 이름으로 저장하겠다
cb(null, file.originalname)
}
})
})
//요청처리
//app.메서드(url, 함수)
//이미지파일을 post로 요청이 왔을때 upload라는 폴더에 이미지를 저장하기
//이미지가 하나일때 single
app.post('/image', upload.single('image'), (req, res)=>{
const file = req.file;
console.log(file);
res.send({
imageUrl: "https://jeanmi-server.herokuapp.com/"+file.destination+file.filename
})
})
//findAll 모든데이터를 조회한다.
app.get('/products',async (req,res)=>{
//데이터 베이스 조회하기
models.Product.findAll()
.then((result)=>{
console.log()
res.send(result);
})
.catch(e=>{
console.error(e)
res.send("파일 조회에 문제가 있습니다.")
})
})
//method get이고 url은 /product/2 로 요청이 온경우
app.get('/product/:id', async (req, res)=> {
const params = req.params;
// const { id } = params;
//하나만 조회할때는 findOne -> select문
models.Product.findOne({
//조건절
where: {
id:params.id
}
})
.then(result=>{
res.send(result);
})
.catch(e=>{
console.log(e);
res.send("상품조회에 문제가 생겼습니다.");
})
});
app.post("/products",(req, res)=>{
//http body에 있는데이터
const body = req.body;
//body객체에 있는 값을 각각 변수에 할당
const { name, price, seller, imageUrl, desciption } = body;
if(!name || !price || !seller) {
res.send("모든 필드를 입력해주세요");
}
//Product테이블에 레코드를 삽입
//create문은 insert문과 동일함.
models.Product.create({
name,
price,
seller,
imageUrl,
desciption
}).then(result=>{
console.log("상품 생성 결과 : ", result);
res.send({
result
})
})
.catch(e=>{
console.error(e);
res.send("상품 업로드에 문제가 생겼습니다.")
})
})
// delete 삭제하기
app.delete('/product/:id', async (req, res) => {
const params = req.params;
models.Product.destroy({where: {id:params.id}})
.then(res.send("상품이 삭제되었습니다."))
})
//실행
app.listen(port, ()=>{
console.log('쇼핑몰 서버가 동작중입니다.');
//sequelize와 데이터베이스 연결작업
//데이터베이스 동기화
models.sequelize
.sync()
.then(()=>{
console.log('DB연결 성공');
})
.catch(e=>{
console.error(e);
console.log('DB연결 에러');
//서버실행이 안되면 프로세서를 종로
process.exit();
})
})
728x90
'프론트앤드 수업' 카테고리의 다른 글
[React] mysql React , select, insert, update, delete문 사용 (0) | 2022.07.11 |
---|---|
[React] Sqlite DB사용, 간단한 웹페이지 만들기[헤로쿠(heroku), vercel] 서버연동 (0) | 2022.07.05 |
[React] Sqlite DB사용, 간단한 웹페이지 만들기_4 (0) | 2022.07.05 |
[React] Sqlite DB사용, 간단한 웹페이지 만들기_3 (0) | 2022.07.05 |
[React] Sqlite DB사용, 간단한 웹페이지 만들기_2 (0) | 2022.07.05 |