[TIL # 53] Node.js 찍먹하기 (2)

Yejin Yang·2022년 7월 17일
0

[TIL]

목록 보기
53/67
post-thumbnail

Node.js에서 백엔드 코드 만들어 보기!

새로운 프로젝트 생성

$ npm init -y
$ npm i express cors

테스트해보기 위한 최소한의 코드만 작성하고자 한다.

// index.js
const express = require('express')

// express()호출하면 사용할 수 있는 app객체가 나온다.
const app = express()
// 요청 객체는 지정 안해서 get 메소드와 동일
app.use('/', (req, res) => {
  // 응답 객체
  res.status(200).json({
    name: '테스트입니다!!'
  })
})

/* 실제 서버로 실행하기 위해 listen 메서드 사용, 듣고(listen) 있다가 1234 포트로 열리면 콜백이 실행 된다 */
// port 번호 1234
app.listen(1234, () => {
	console.log('서버 동작!')
})
$ npm index.js
서버 동작!

localhost:1234 로 접속하면 json형식의 문구가 보인다.

{ "name" : "테스트입니다!!" }

이게 백엔드 코드의 출발의 기본이고 더욱! 복잡해진다.

express에서 제공하는 node.js router 사용하기

// index.js
const express = require('express')
const cors = require('cors')

const router = express.Router()

router.get('/', (req, res) => {})
router.post('/', (req, res) => {})
router.put ('/', (req, res) => {})


const app = express()
app.use(express.json())
app.use(cors())
app.use('/api', router )


// port 번호 1234
app.listen(1234, () => {
	console.log('서버 동작!')
})

응용해서 작성한 API코드

// 파일 다루는 내장 API
const fs = require('fs');
const { nanoid } = require('nanoid');
const express = require('express');
const router = express.Router()

const todosDir = `${global.appRoot}/todos`
const todosFile = `${global.appRoot}/todos/index.json`

// Read
router.get('/', (req, res) => {
  const todos = JSON.parse(fs.readFileSync(todosFile, 'utf8'))

  res.status(200).json(todos)
})

// Create
router.post('/', (req, res) => {
  const { title } = req.body

  let todos = {}
  try {
    todos = JSON.parse(fs.readFileSync(todosFile, 'utf8'));
  } catch (error) {
    fs.mkdirSync(todosDir)
    fs.writeFileSync(todosFile, '{}')
  }

  todos[nanoid()] = { title }
  fs.writeFileSync(todosFile, JSON.stringify(todos, null, 2))

  res.status(200).json({ title })
})

// Update
// index.json 파일 객체>객체로 만들어서 key값으로 찾을 수 있게 함
router.put('/:id', (req, res) => {
  const { id } = req.params
  const { title } = req.body
  const todos = JSON.parse(fs.readFileSync(todosFile, 'utf8'))
  todos[id].title = title

  fs.writeFileSync(todosFile, JSON.stringify(todos, null, 2))

  res.status(200).json(todos[id])
})

// Delete
router.delete('/:id', (req, res) => {
  const { id } = req.params

  const todos = JSON.parse(fs.readFileSync(todosFile, 'utf8'))
  delete todos[id]

  // 삭제 후 파일 덮어쓰기
  fs.writeFileSync(todosFile, JSON.stringify(todos, null, 2))
  
  res.status(200).json(true)
})

// 작업 후 파일 내보내기
module.exports = router

// Create
 todos[nanoid()] = { title }
  • title을 나노id를 대괄호 표기법으로 호출해서 생성된 id에 title을 포함하고 있는 객체데이터를 할당해주면 todos폴더에 index.json에는 고유한 아이디가 부여된다.

profile
Frontend developer

0개의 댓글