본문 바로가기

Nodejs

route 활용 (tweet 예제) (2024-04-26)

tweet 예제

더보기

app.js

import express from "express";
import morgan from "morgan";
import tweetsRouter from './router/tweets.js';

const app = express();

app.use(express.json());
app.use(morgan("dev"));

app.use('/tweets', tweetsRouter);

app.use((req, res, next) => {
    res.sendStatus(404)
});

app.listen(8080);

 

router/tweets.js

import express from 'express';

const router = express.Router();

let tweets = [
    {
        id:'1',
        text: '안녕하세요!',
        createAt: Date.now().toString(),
        name:'김사과',
        username:'apple',
        url: 'https://www.logoyogo.com/web/wp-content/uploads/edd/2021/02/logoyogo-1-45.jpg'
    },
    {
        id:'2',
        text: '반갑습니다!',
        createAt: Date.now().toString(),
        name: '반하나',
        username: 'banana',
        url: 'https://www.urbanbrush.net/web/wp-content/uploads/edd/2019/07/urbanbrush-20190716011532646988.png'   
    }
];

// 해당 아이디에 대한 트윗 가져오기
// GET
// http://localhost:8080/tweets?username=:username
router.get('/', (req, res) => {
    const username = req.query.username;
    const data = username 
        ? tweets.filter((tweets) => tweets.username == username): tweets;
        // tweets 안에 username 값이 있으면 가져오고 없으면 

    res.status(200).json(data);
})


// 글 번호에 대한 트윗 가져오기
// GET
// http://localhost:8080/tweets/:id
router.get('/:id', (req, res, next) => {
    const id = req.params.id;
    const tweet = tweets.find((tweet) => tweet.id === id);
    if(tweet){
        res.status(200).json(tweet);
    }else{
        res.status(404).json({message:`${id}의 트윗이 없습니다.`});
    }
});


// 트윗하기
// POST
// http://localhost:8080/tweets
// name, username, text를 받아서 글을 등록 
// json형태로 입력 후 추가된 데이터까지 모두 json으로 출력
router.post('/', (req, res, next) => {
    const {text, name, username} = req.body;
    const tweet = {
        id: '10',
        text: text,
        createAt: Date.now().toString(),
        name: name,
        username: username,
        url: 'https://www.urbanbrush.net/web/wp-content/uploads/edd/2019/07/urbanbrush-20190716011532646988.png'
    };
    tweets = [tweet, ... tweets];
    res.status(201).json(tweets);
});




// 트윗 수정하기
// PUT
// http://localhost:8080/tweets/:id
// id, username, text를 받아서 글을 수정
// json형태로 입력 후 변경된 데이터까지 모두 json으로 출력
router.put('/:id', (req, res, next) => {
    const id = req.params.id;
    const text = req.body.text;
    const tweet = tweets.find((tweet) => tweet.id === id);
    if(tweet){
        tweet.text = text;
        res.status(201).json(tweet);
    }else{
        res.status(404).json({massage: `${id}의 트윗이 없습니다`})
    }
});


// 트윗 삭제하기
// DELETE
// http://localhost:8080/tweets/:id
router.delete('/:id', (req, res, next) => {
    const id = req.params.id;
    tweets = tweets.filter((tweet) => tweet.id !== id);
    // 입력 받은 id 값은 보여주지 않겠다
    res.status(204).json(tweets);
});





export default router;

 

'Nodejs' 카테고리의 다른 글

리팩토링, validation(2024-04-29)  (0) 2024.04.29
params, query  (0) 2024.04.29
post, error, route (2024-04-25)  (0) 2024.04.25
Buffer, Stream, pipe, nodemon, Express , npm (2024-04-24)  (0) 2024.04.24
Promise, async, await, JSON, fetch(2024-04-23)  (0) 2024.04.23