새로운 프로젝트 생성
$ 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" : "테스트입니다!!" }
이게 백엔드 코드의 출발의 기본이고 더욱! 복잡해진다.
// 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
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 }