수업 복습/Node.js
10월 31일 수업 내용 - Node.js / Day03
김복칠
2023. 10. 31. 15:14
1. express 활용
import express from 'express'
// 객체 생성
const app = express()
app.get('/', (req,res,next) => {
res.send('<h2>익스프레스 서버로 만든 첫번째 페이지</h2>')
})
app.get('/hello',(req,res,next)=>{
res.setHeader('Content-Type','application/json')
res.status(200).json({name:'apple',age:20})
})
// 미들웨어
// next : 다음 미들웨어를 호출
app.use((req,res,next)=>{
res.setHeader('node-skill','node middleware!')
next() // 미들웨어 다음으로 제어권을 넘김
})
app.use((req,res) => {
res.send('<h2>not found</h2>')
})
// 서버 실행
app.listen(8080)
2. get 활용
import express from 'express'
const app = express()
// lcoalhost:8080/posts
// lcoalhost:8080/posts?number=1
// lcoalhost:8080/posts?number=1&userid=apple
app.get('/posts',(req,res)=>{
console.log('posts를 호출');
console.log('path:',req.path);
console.log('query:',req.query); // query => 'path ?' 뒤에 딕셔너리 형태로 위치함
res.sendStatus(200)
})
// laoclhost:8080/posts/1
app.get('/posts/:id',(req,res)=>{
console.log('/posts/:id 호출');
console.log('path:',req.path);
console.log('params:',req.params); // params => 'path /' 뒤에 딕셔너리 형태로 위치함
res.sendStatus(200)
})
app.get(['/mypage','/myroom'],(req,res)=>{
res.send('<h2>mypage 겸 myroom 페이지</h2>')
})
app.get('/member/:id',(req,res)=>{
console.log('/member/id 호출!');
console.log(req.path,'호출!');
console.log(req.params['id'],'번 멤버가 출력됨!');
console.log(req.params.id,'번 멤버가 출력됨!');
console.log(`${req.params.id}번 멤버가 출력됨!`);
res.sendStatus(200)
})
app.post('/posts',(req,res)=>{
console.log('post 메서드로 posts를 호출');
console.log('path:',req.path);
res.sendStatus(200)
})
app.listen(8080)
3. post 활용
import express from 'express'
const app = express()
app.use(express.json())
app.post('/posts',(req,res)=>{
console.log(req.body);
res.status(201).send('새로 글이 등록되었습니다')
})
app.listen(8080)
4. error 활용
import express from 'express'
import fs from 'fs'
import fsAsync from 'fs/promises'
// localhost:8080/file1
const app = express()
app.use(express.json())
app.get('/file1',(req,res)=>{
fs.readFile('/file1.txt',(err, data)=>{
if(err){
res.sendStatus(404)
}
})
})
// localhost:8080/file2
// file2를 읽어 에러가 발생하면 404를 리턴
// 단, file2를 읽을 경우 동기식으로 작성
app.get('/file2',(req,res)=>{
try{
const data = fs.readFileSync('/file2.txt')
}catch(error){
res.sendStatus(404)
}
})
app.get('/file3',(req,res)=>{
fsAsync.readFile('/file3.txt').catch((error) => {res.sendStatus(404)})
})
// async ~ await : 비동기 프로그래밍에서 async 함수내에서 Promise를 처리할 때 사용. await를 사용하면 프로그램은 Promise가 완료될 때까지 기다리며 그 후 비동기 작업의 결과를 반환하거나 처리
app.get('/file4',async(req,res)=>{
try{
const data = await fsAsync.readFile('/file4.txt')
}catch{
res.sendStatus(404)
}
})
app.use((req,res,next)=>{
const error = new Error('테스트 에러')
next(error)
})
app.use((error,req,res,next) => {
console.error(error)
res.status(500).json({message:'서버에러'})
})
app.listen(8080)
5. routing 활용 -1
import express from 'express'
const app = express()
app
.route('/posts')
.get((req,res)=>{
res.status(200).send('GET : /posts')
})
.post((req,res)=>{
res.status(200).send('POST : /posts')
})
app
.route('/member/:id')
.put((req,res)=>{
res.status(201).send('PUT : /member/:id')
})
.delete((req,res)=>{
res.status(200).send('DELETE : /member/:id')
})
app.listen(8080)
6.routing 활용 -2
<메인 js 페이지>
import express from 'express'
import userRouter from './routes/user.js'
import postRouter from './routes/post.js'
import morgan from 'morgan'
const app = express()
app.use(express.json())
// common, combined, dev, short
app.use(morgan('dev'))
app.use('/users',userRouter)
app.use('/posts',postRouter)
app.listen(8080)
------------------------------------------------------------------------
<서브 js 페이지 - user.js>
import express from 'express'
const router = express.Router()
router.use((req,res,next)=>{
console.log('posts에 존재하는 미들웨어');
next()
})
router.get('/',(req,res)=>{
res.status(200).send('GET : /posts')
})
router.post('/',(req,res)=>{
res.status(200).send('POST : 글작성')
})
router.put('/:id',(req,res)=>{
res.status(200).send('PUT : 글수정')
console.log(req.params);
})
router.delete('/:id',(req,res)=>{
res.status(200).send('DELETE : 글삭제')
console.log(req.path);
})
export default router
======================================================================================
<서브 js 페이지 - post.js>
import express from 'express'
const router = express.Router()
router.use((req,res,next)=>{
console.log('users에 존재하는 미들웨어');
next()
})
// 회원정보보기
router.get("/",(req,res)=>{
res.status(200).send('GET: /users')
})
router.get("/member",(req,res)=>{
res.status(200).send('GET: /member')
})
// 회원가입
router.post("/",(req,res)=>{
res.status(201).send('POST: /users')
})
// 정보수정
router.put("/:id",(req,res)=>{
res.status(201).send('PUT: /users/:id')
console.log(req.path);
})
// 회원탈퇴
router.delete("/:id",(req,res)=>{
res.status(201).send('DELETE: /users/:id')
console.log(req.path);
console.log(req.params);
})
export default router