이제 막 슬픔 없이 십오 초 정도가 지났다

개인과제 : 모듈, Express 모듈의 req res 객체

문종현 2022. 9. 30. 13:51

특정한 기능을 가진 여러 개의 함수와 변수들의 집합.

다른 프로그램에서 해당 모듈을 재사용 가능.

그 자체로도 하나의 프로그램이면서 다른 프로그램의 부품인 셈.

보통 1개의 파일 1개의 모듈이 되곤 한다.


어떻게 쓰나?

 

exort  : 외부 모듈에서 해당 변수, 함수에 접근.

module.exports = router;

import(), require() : 외부 모듈 기능 가져올 수 있다.

예시) 

//app.js
const express = require('express');
const app = express();
const port = 3000;

 

예시)

// app.js
const goodsRouter = require("./routes/goods");

 

예시)

// routes/goods.js
const express = require('express'); 
// express라이브러리를 express 변수에 할당. //require()???
const router = express.Router(); 
// express의 Router()함수로 함수 결과값을 router 변수에 할당.

 

자바스크립트는 대표적으로 CommonJSES6(ES2015) 방식으로 모듈 시스템을 관리

require는 현재 학습하고 있는 CommonJS로 모듈 시스템을 관리할 때 사용

import는 ES6(ES2015)로 모듈 시스템을 관리할 때 사용

 

import를 써보겠다면 아래 문서 참조.

 

https://nodejs.org/api/packages.html#determining-module-system

 

Modules: Packages | Node.js v18.10.0 Documentation

Modules: Packages# Introduction# A package is a folder tree described by a package.json file. The package consists of the folder containing the package.json file and all subfolders until the next folder containing another package.json file, or a folder nam

nodejs.org


Express 모듈의 req 객체와 res 객체 (일단 중요한 것만 기록)

1)req 객체

req.body : request 호출시 body로 전달된 정보가 담긴 객체. 

- body-parser Middleware 를 이용해야 사용할 수 있다는 단서가 붙어 있다.

// body-parser Middleware 를 쓰기 위한 코드.
//app.use() : 전역 미들웨어를 쓰겠다는 의미라는데...???
//일단은 이걸 써야 req.body가 써진다는군.
app.use(express.json())
//썬더 클라이언트의 바디탭에서 
app.post("/", (req,res) => {
  console.log(req.body);

  res.send("기본 URI에 POST 메소드가 정상적으로 실행되었습니다.")
})

 

 

cf) res.json 은 response로 json이 들어온다.

하지만 이 예시는 req.body로 body에서 API 클라이언트의 기능으로 직접 Json 데이터를 타이핑해 찍은 경우다.

 


req.params : 라우터 매개변수에 대한 정보를 담은 객체

'/:id' 에서 콜론( : )을 쓰면, 기본 URI '/'  뒤의 값은 모두 id에 들어온다.

app.get('/:id', (req, res) => {
  console.log(req.params);

  res.send(":id URI에 반환되었습니다. 그래서 이게 뭔데요?")
})

 


 

req.query : Request 호출시 쿼리 스트링으로 전달된 정보가 담긴 객체.

app.get('/', (req, res) => {
    console.log(req.query);
  res.send('3000번째 항구에 온 걸 환영해.');
});

 

-썬더 클라이언트에서 새 리퀘스트의 Query 탭에서 이 기능을 확인할 수 있다.

localhost3000/ 뒤의 쿼리 스트링이 key value 형태로 콘솔에 찍혔다.


2)res 객체

res.status(코드) : response에 HTTP 상태코드 지정

//이 api 를 호출했을 때의 상태 
//보통 200은 정상, 400 에러

app.get('/',(req,res)=> {
  console.log(req.query)

  res.status(400).json({
    "KeyKey" : "value 입니다",
    "Jedi" : "Anakin Skywalker"
  });
})

 

 


res.send(데이터) : 데이터 포함해 response 전달

 

//localhost:3000/
//res.sendFile(__dirname + '/index.html') 
app.get('/', (req, res) => {
     console.log(req.query);
   res.send('?key=value 로 이루어진 querysitrng이 반환되었습니다. 근데 이걸 어떻게 활용하죠?');
 });

 

 


res.json(JSON) : JSON 형식으로 response 전달

//위 주석처리한 req.query를 res.send로 받는 것을 
//res.json으로 받아보는 코드.
app.get('/',(req,res)=> {
  console.log(req.query)

  const obj = {
    "KeyKey" : "value 입니다",
    "Jedi" : "Anakin Skywalker"
  }
  res.json(obj);
})