개발일지

개발일지 45일차

index.ys 2023. 5. 6. 02:19

swagger

- swagger 깃허브에서 클론 해오기

git clone https://github.com/swagger-api/swagger-ui.git

- cors설정

 npm install http-server --cors

- dist폴더를 원하는 곳으로 이동후 나머지 폴더 및 파일삭제

swagger 패키지 설치

- swagger-jsdoc : jsdoc주석으로 Swagger API 문서를 표현하기 위해 사용

- swagger-ui-express: swagger-ui와 express를 연결하기 위해 사용

npm install swagger-jsdoc swagger-ui-express --save-dev

swagger.js 파일 생성후 환경 설정

const swaggerUi = require("swagger-ui-express")
const swaggereJsdoc = require("swagger-jsdoc")

const options = {
    swaggerDefinition: {
        openapi: "3.0.0",
        info: {
            version: "1.0.0",
            title: "개발중",
            description:
                "프로젝트 설명 Node.js Swaager swagger-jsdoc 방식 RestFul API 클라이언트 UI",
        },
        servers: [
            {
                url: "http://localhost:3000", // 요청 URL
            },
        ],
    },
    apis: ["./routers/*.js", "./routers/user/*.js"], //Swagger 파일 연동
}
const specs = swaggereJsdoc(options)

module.exports = { swaggerUi, specs }

app.js에 swagger 라이브러리 require

const { swaggerUi, specs } = require("./swagger")
app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(specs))

routers 폴더에 index.js 설정

const router = require("express").Router()
const user = require("./user")

/**
 * @swagger
 * tags:
 *   name: Users
 *   description: 유저 추가 수정 삭제 조회
 */
router.use("/user", user)

module.exports = router

api-docs 경로 접속

실제 router를 연결하는 부분에 @swagger 문서를 작성하여 api테스트 

fs모듈

파일읽기

- readFile메서드

fs.readFile('경로', 'utf8', callback); 		// 비동기
fs.readFileSync('경로');  // => <data>		// 동기

파일 읽기 예시

app.get('/:id', async (req, res) => {
    const { id } = req.params
    console.log(id)
    try {
        // fs.readFile('경로', 'utf8', callback); 		// 비동기
        // fs.readFileSync('경로');  // => <data>		// 동기
        fs.readFile('./test.txt', 'utf8', (err, data) => {
            console.log(data + "(1)");
        });
        const data = fs.readFileSync('./test.txt', "utf8");
        console.log(data + "(2)")
        res.send("hi")
    } catch (err) {
        console.log(err);
    }
})

동기적으로 호출된 함수 실행후 비동기 함수 실행

test.txt

안녕하세요

파일쓰기

- writeFile 메소드

fs.writeFile(경로, data, [options], callback) 	// 비동기
fs.writeFileSync(경로, data, [options])     	// 동기

파일 쓰기 예시

app.get('/:id', async (req, res) => {
    const { id } = req.params
    console.log(id)
    try {
        // fs.writeFile(경로, data, [options], callback) 	// 비동기
        // fs.writeFileSync(경로, data, [options])     	// 동기

        fs.writeFile('./test.txt', "수정할 데이터1", (err) => {
            fs.readFile('./test.txt', 'utf8', (err, data) => {
                console.log(data);
            });
        })
        
    } catch (err) {
        console.log(err);
    }
})

변경된 test.txt파일내용

파일 쓰기 동기적 처리예시

app.get('/:id', async (req, res) => {
    const { id } = req.params
    console.log(id)
    try {
        // fs.writeFile(경로, data, [options], callback) 	// 비동기
        // fs.writeFileSync(경로, data, [options])     	// 동기

      	fs.writeFileSync('./test.txt', "수정합니다.");
        const data = fs.readFileSync('./test.txt', "utf8");
        console.log(data);
        // fs.writeFileSync('./test.txt', "수정합니다.");
        // const data = fs.readFileSync('./test.txt', "utf8");
    } catch (err) {
        console.log(err);
    }
})
 

파일 목록 받아오기

 fs.readdir('./', function (err, filelist) {
            res.json({ filelist });
        });

출력 결과