put 메소드 동작 구현하기
app.js => express 코드
1.json => 객체형태를 저장한 파일
import express from 'express';
const app = express();
import cors from 'cors';
import fs from 'fs';
app.use(express.json());
app.use(cors());
app.put('/puts', (req,res)=>{
const result1 = fs.writeFileSync('1.json',JSON.stringify(req.body))
console.log('write');
const result =fs.readFileSync('1.json','utf-8')
console.log('read');
res.status(201).send(result);
})
app.listen(8080);
writeFileSync 와 readFileSync를 사용해 해당 내용이 다 와서 write하기 전까지 다음 내용을 실행하지않고
read하기 전까지 다음 내용을 실행하지않는 순차적 진행을 통해
write
read
순서로 콘솔에 출력이되고 원하는 결과를
1.json
파일에 넣을 수 있다.
put 메소드를 통한 req를 붙여서 보내고 해당 1.json이 수정되고 원하는 결과가 반환되는 것을 볼 수 있다.
import express from 'express';
const app = express();
import cors from 'cors';
import fs from 'fs';
app.use(express.json());
app.use(cors());
function write(req){
return new Promise(resolve=>{
console.log('write');
fs.writeFile('1.json',JSON.stringify(req.body),()=>{resolve()})
})
}
function read(){
return new Promise(resolve=>{
console.log('read');
fs.readFile('1.json','utf-8',(err,result)=>{resolve(result)})
})
}
app.put('/puts', async (req,res)=>{
const res1 = await write(req);
const res2 = await read();
res.status(201).send(res2);
})
app.listen(8080);
writeFile과 readFile은 비동기로 진행하므로 같이 진행시 서로간의 충돌이 발생 할 수 있다.
따라서async await
을 통해 순차적으로 실행되게 만들어야한다.
해당 put 부분의 미들웨어함수를 async로 전체를 묶고 순차적 진행을 위한 write / read 부분을 await으로 만들고
해당 함수는new Promise
를 리턴해야하므로 return 을 new Promise로 진행한다.
write의 경우 받아올 것은 없으므로
resolve
로만 하고
read의 경우 수정한 값을res.status(201).send()
를 통해 request로 받고 싶으므로resolve(result)
를 한다.
각각의 writeFile과 readFile 콜백으로 resolve()가 있으므로 해당 내용이 끝나면 다음 코드가 진행되는 순차적인 진행이 가능하다.
put 메소드를 통한 req를 붙여서 보내어
1.json
이 수정 / request를 통해 바뀐 내용을 반환
writeFile / writeFileSync는 문자열을 대상으로 하므로
req.body는 객체 형태이므로JSON.stringify(req.body)
로 해야한다.
파일의 수정은 쓰는것과 읽는것이 충돌되게 해서는 안된다.
즉, 순차적으로 진행해야한다.
이를 위해서 writeFileSync, readFileSync를 통해 순차적으로 진행 할 수 있고
writeFile , readFile을 쓴다면 async await를 이용해 함수를 통한return new Promise
로 순차적으로 진행 할 수 있다.