[TIL] json-server 배포

yeols·2023년 12월 3일
1

[TIL]

목록 보기
47/72

이번 개인 과제에서는 인증서버(회원정보 및 로그인 관련)는 튜터님의 개인 서버를 이용하지만
letters를 저장할 서버는 따로 등록해서 사용해야한다.

test를 할때에는 프로젝트 내에 json-server를 다운받아서 사용했만
배포를 위해 신규로 프로젝트를 만들었다.

간단한 프로젝트 생성과정

  1. json-server 배포를 위한 폴더 생성
mkdir [디렉토리명]
  1. nodejs프로젝트 시작 (package.json 파일 생성)
npm init -y
  1. server.js 파일 만들기
const jsonServer = require("json-server");
const server = jsonServer.create();
const router = jsonServer.router("db.json");
const middlewares = jsonServer.defaults();

server.use(middlewares);
server.use(router);
server.listen(3000, () => {
  console.log("JSON Server is running");
});
  1. package.json 파일에 script 설정
{
	"scripts": {
    "start": "node server.js"
  }
}

여기까지하고
추가적으로 개인과제 필수 요구사항에 프로필을 수정하면
자신이 쓴 글에대해 모든 프로필이 새로 수정된 프로필로 바뀌어야 한다는 요구사항이 있다.
그 부분을 react내에서 처리를 하면 되겠지만 개인적으로는 userId를 받아서 서버에서 알아서 수정되는 nickname과 profile img를 바꾸고 싶었다.

그래서 아래와 같이 server.js를 수정하였다.

const jsonServer = require("json-server");
const server = jsonServer.create();
const router = jsonServer.router("db.json");
const middlewares = jsonServer.defaults();

server.use(middlewares);
server.use(jsonServer.bodyParser);

server.patch('/letters/sync-profile/:userId', (req, res) =>{
  const userId = req.params.userId;
  const body = req.body;
  const db = router.db;
  const collection = db.get('letters');
  
  const itemsToUpdate = collection.filter({userId}).value();
  
  if(itemsToUpdate.length === 0){
    res.status(404).send('현재 아이디로 검색되는 letter가 없습니다.');
    return;
  }
  
  itemsToUpdate.forEach(item => {
    collection.find({id: item.id}).assign(body).write();
  });
  res.send('업데이트 되었습니다.');
  
});

server.use(router);
server.listen(3000, () => {
  console.log("JSON Server is running");
});

수정된 부분은 server.patch부분인데 이미 default로 url '/letters/:id' PATCH메소드 가 이미 잡혀있기 때문에 '/letters/sync-profile/:userId' 이런 주소를 사용하게 되었고 이 url로 patch 요청이오면 body에 담긴 데이터를 userid와 같은 글들을 전부 수정하는 식으로 작성하였다.

처음으로 glitch를 사용했는데 정말 독특한 사이트 같고..
사실 좀 별..

profile
흠..

0개의 댓글

관련 채용 정보