개인과제 : 모듈, Express 모듈의 req res 객체
특정한 기능을 가진 여러 개의 함수와 변수들의 집합.
다른 프로그램에서 해당 모듈을 재사용 가능.
그 자체로도 하나의 프로그램이면서 다른 프로그램의 부품인 셈.
보통 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 변수에 할당.
자바스크립트는 대표적으로 CommonJS, ES6(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);
})