https://dashboard.heroku.com/apps
nodemon 을 설치하기
npm start //헤로쿠에서 배포할때 start아니면 돈내야함
버전을 다르게 하고 싶으면..? 파일만 일단 구분해서 하면 된다아앙!! v1/todos.js나 v2/todos.js이라고 생각하면 된다!!
//router/api/todos
const express = require('express')
const router = express.Router()
//작업
module.export = router
RESTful API
router.delete('/:id', (req, res) => { //삭제 // 제일 적합
console.log('req.params::',req.params)
res.status(200).json(true)
})
router.delete('/:id', (req, res) => { //삭제
console.log('req.body::',req.body)
const {id} = req.body // body에 담아서 요청하도록 할 수 있다!!
res.status(200).json(true)
})
router.post('/delete', (req, res) => { //삭제
console.log('req.body::',req.body)
const {id} = req.body // body에 담아서 요청하도록 할 수 있다!!
res.status(200).json(true)
})
rest api는 표준이 없기때문에 다양한 스타일을 가질 수 있다.
//todos.js 연습!!
const express = require('express')
const router = express.Router()
//작업
//api/todos/
router.get('/', (req, res) => {
console.log('req.query:::',req.query) //http://localhost:1234/api/todos?a=1&b=dayoung 에서 { a: '1', b: 'dayoung' }로 객체데이터로 내어줌
const { apikey } = req.query
const validApiKeies = [123456, 123457, 851216 ] //db에서 받아왔다고 치고!!
// console.log(apikey.toFixed(2))//문자데이터에 숫자처럼 처리하면 500에러...
if( !validApiKeies.includes(Number(apikey))) { //만약 api키가 없으면
return res.status(401).json('유효한 정보가 아닙니다.') // 너무 상세하게 제공해주면 해킹하는 사람이 좋아한다 앗 비번이 틀렸구나?!!
}
return res.status(200).json({ //json 메서드가 JSON.stringify()를 자동으로 해줘서 해줄 필요가 없다. // if문 안에서 return값을 줬으면 다른 부분에서도 return이 있도록 해주는 것이 좋다!!
name: 'First Todos Api!!'
})
})
router.post('/', (req, res) => {
console.log('req.body::',req.body)
res.status(200).json(true)
})
//https://abc.com/api/todos/1231423
router.put('/:id', (req, res) => { //수정
console.log('req.params::',req.params)
res.status(200).json(true)
})
router.delete('/:id', (req, res) => { //삭제 // 제일 적합
console.log('req.params::',req.params)
res.status(200).json(true)
})
module.exports = router
지금은 db가 연결되지 않은 상태기 때문에 파일에 데이터를 저장하도록 관리할 예정이다!!
헤로쿠같은 경우에는 fs로 만들었을 때 재배포를하면 파일 내용이 누적이 되는 것이 아니라 그냥 날라가고 초기화가 된다!!
//index.js
const express = require('express')
const cors = require('cors')
global.appRoot = __dirname
const app = express()
app.use(express.json())
// app.use(cors({ // 화이트 리스트!! 내가 적은 곳만 허용할 것이다!!
// origin: ['http://naver.com']
// }))
app.use(cors())
//http://localhost:1234/api/todos
app.use('/api/todos', require('./routes/api/todos.js') )
const port = process.env.PORT || 1234 //다른 환경에서도 이렇게 환경변수설정해주면 돌아감!! 로컬에서는 1234
app.listen(port,()=> {
console.log('서버 동작합니다!!')
})
//routes/api/todos.js
const fs = require('fs') // 내장 api (node js API : nodejs에서 가지고 있는 명령들/기능들 정도로 이해하면 좋음!! )
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, {encoding:'utf8'})) //최상위 경로에서 todos폴더를 불러와라!!
}catch(e) {
fs.mkdirSync(todosDir)
fs.writeFileSync(todosFile, '{}')//두번째 인수는 데이터!!
}
todos[nanoid()] = { title }
fs.writeFileSync(todosFile, JSON.stringify(todos, null, 2))// 두번째 세번째는 예쁘게 보이려고 하는거임!!
res.status(200).json({title})
})
//Updateyyu7y77
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
다음시간엔 강사님 몽고디비를 간단하게 연결해볼 예정이다!
npm i mongoose
몽고디비를 제어하는 패키지 !
'핀테크 서비스 프론트엔드 개발자 취업 완성 2기 > 학습일지' 카테고리의 다른 글
[TIL] nodejs ( md 파일을 html파일로 바꿔보자!!) (0) | 2022.07.15 |
---|---|
[TIL] vercel 배포하기!! , severless function vs edge function (0) | 2022.07.14 |
[TIL] 220712 에러수정 및 edge-functions (0) | 2022.07.12 |
[TIL] 서버리스함수 & 환경변수 설정 (0) | 2022.07.11 |
[TIL] 22.07.08 firebase 마지막 (0) | 2022.07.08 |
댓글