본문 바로가기

코딩/project

pj, 1일차

 

 

// package.json

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "nodemon": "^3.1.0"
  }
}

 

npm i nodemon --save-dev // 개발자 모드로 nodemon 설치
npm i express	// express 설치
npm i morgan	// morgan 설치

 

//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);

 

 

//.gitignore

node_modules/
.gitignore
package-lock.json

 

 

// tweet.js

import express from "express";
const router = express.Router();
let tweets = [
    {
        id: '1',
        text: '안녕하세요!',
        createdAt: 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: '반갑습니다!',
        createdAt: Date.now().toString(),
        name: '반하나',
        username: 'banana',
        url: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTJSRyel4MCk8BAbI6gT_j4DBTEIcY0WW4WWfoklymsWA&s'
    }
];

// 해당 아이디에 대한 트윗 가져오기
// GET
// http://localhost:8080/tweets?username=:username
router.get('/', (req, res, next) => {
    const username = req.query.username;
    const data = username 
        ? tweets.filter((tweet) => tweet.username == username )
        : tweets;
    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,
        createdAt: Date.now().toString(),
        name: name,
        username: username,
        url :  'https://www.logoyogo.com/web/wp-content/uploads/edd/2021/02/logoyogo-1-45.jpg'
    };
    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({message: `${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);
    res.sendStatus(204);
});


export default router;

 

 

get

 

put



🤍

 

ChatGPT에게 물어본 오늘의 공부 -

 

✔ nodemon이란?

 

✔ Express.js 란?

 

Express.js는 Node.js를 위한 웹 애플리케이션 프레임워크로, Node.js의 HTTP 모듈을 더 쉽게 사용할 수 있도록 도와줍니다. Express.js는 매우 간단하고 유연한 구조를 가지고 있으며, 웹 및 모바일 애플리케이션의 빠른 개발을 위해 설계되었습니다.

Express.js를 사용하면 다음과 같은 주요 기능을 제공합니다.

  1. 미들웨어(Middleware) 지원: Express는 미들웨어를 사용하여 HTTP 요청에 대한 처리 과정을 단계적으로 나눌 수 있습니다. 이를 통해 요청을 처리하기 전에 인증, 로깅, 데이터 변환 등의 작업을 수행할 수 있습니다.
  2. 라우팅(Routing): Express는 HTTP 요청에 따라 적절한 핸들러 함수를 호출하는 라우팅 기능을 제공합니다. 이를 통해 각 요청에 대한 처리 로직을 구조화하고 관리할 수 있습니다.
  3. 템플릿 엔진 지원: Express는 다양한 템플릿 엔진(예: Pug, EJS)을 지원하여 서버 측에서 동적인 HTML을 생성할 수 있습니다.
  4. 정적 파일 제공: Express는 정적 파일(이미지, CSS, JavaScript 등)을 제공하는 기능을 제공합니다. 이를 통해 클라이언트에게 정적 자산을 제공할 수 있습니다.
  5. RESTful API 지원: Express를 사용하여 RESTful API를 쉽게 작성할 수 있습니다. HTTP 메서드(GET, POST, PUT, DELETE 등)와 URL 경로를 기반으로 요청을 처리하는 API를 작성할 수 있습니다.
  6. 세션 및 쿠키 관리: Express는 세션 및 쿠키 관리를 위한 미들웨어를 제공하여 사용자 인증 및 상태 유지를 쉽게 구현할 수 있습니다.

Express.js는 Node.js의 유연성과 뛰어난 성능을 기반으로 하여 웹 애플리케이션을 빠르고 간편하게 개발할 수 있도록 도와주는 매우 인기 있는 프레임워크입니다.

 

✔ morgan 이란?

 

morgan은 Node.js의 HTTP 요청 로깅을 위한 미들웨어입니다. Express 애플리케이션에서 사용되며, HTTP 요청에 대한 정보를 콘솔이나 파일 등에 기록하는 데 사용됩니다. 주로 개발 및 디버깅 목적으로 사용됩니다.

morgan 미들웨어는 클라이언트가 요청한 HTTP 메서드, URL, 상태 코드, 응답 시간 등과 같은 요청 및 응답에 관한 다양한 정보를 기록합니다. 이 정보는 콘솔에 출력되거나 파일에 기록될 수 있으며, 로그 형식은 사용자가 지정할 수 있습니다.

간단한 사용 예시는 다음과 같습니다.

위의 예시에서 morgan('combined')은 Apache 형식의 로그를 출력하는 것을 의미합니다. 이 외에도 'common', 'dev', 'short', 'tiny' 등의 다양한 로그 형식을 사용할 수 있습니다.

morgan 미들웨어를 사용하면 Express 애플리케이션에서 발생하는 HTTP 요청에 대한 상세한 로그를 확인할 수 있어, 개발 및 운영 중에 문제를 식별하고 해결하는 데 도움이 됩니다.

 

 

✔ req, res, next

req, res, next는 Express 미들웨어 함수에서 사용되는 매개변수들입니다.

  1. req (Request): HTTP 요청 객체입니다. 클라이언트가 서버로 전송한 데이터, 파라미터, 헤더 등의 정보를 포함합니다. Express의 req 객체는 Node.js의 기본 http.IncomingMessage 객체를 확장한 것입니다. 주요 속성은 다음과 같습니다.
    • req.params: 라우팅 경로에서 파라미터로 전달된 값들을 포함합니다.
    • req.query: URL 쿼리 파라미터에 전달된 값들을 포함합니다.
    • req.body: POST나 PUT 요청에서 전송된 데이터를 포함합니다.
    • req.headers: HTTP 요청 헤더를 포함합니다.
  2. res (Response): HTTP 응답 객체입니다. 클라이언트로 응답을 보내는 데 사용됩니다. Express의 res 객체는 Node.js의 기본 http.ServerResponse 객체를 확장한 것입니다. 주요 메서드는 다음과 같습니다.
    • res.send(): 클라이언트에 응답 데이터를 보냅니다.
    • res.json(): JSON 형식으로 응답 데이터를 보냅니다.
    • res.sendStatus(): 지정된 상태 코드로 응답을 보냅니다.
    • res.redirect(): 지정된 URL로 리다이렉트합니다.
  3. next: 미들웨어 체인에서 다음 미들웨어 함수를 호출하는 함수입니다. Express 미들웨어 함수에서 호출되는 경우 다음 미들웨어 함수로 제어를 전달합니다. next 함수를 호출하지 않으면 미들웨어 체인이 종료되며 응답이 클라이언트로 전송됩니다.

Express의 미들웨어 함수는 일반적으로 (req, res, next)와 같이 세 개의 매개변수를 받습니다. req는 클라이언트로부터의 요청 정보를 담고 있고, res는 클라이언트로의 응답을 생성하는 데 사용됩니다. next는 미들웨어 체인에서 다음 미들웨어 함수를 호출하는 데 사용됩니다.

 
 
 

 

 

🤍

'코딩 > project' 카테고리의 다른 글

pj, 6일차  (0) 2024.05.08
pj, 5일차  (0) 2024.05.03
pj, 4일차  (0) 2024.05.02
pj, 3일차  (0) 2024.04.30
pj, 2일차  (0) 2024.04.30