const goodsRouter = require("./routers/goods");
app.use("/api", [goodsRouter]);
--> 위 코드를 통해 아래에 있는 모듈이 메인 index.js에 추가되는 것이다.
goods.js파일에서 라우터에 등록된 path들은 "goods/" 와 "/goods/:goodsId"이다.
하지만 실제로 이 코드에 url을 통해 request하려면 http://도메인/api/goods 혹은 http://도메인/api/goods/22 등의 형식으로 접근해야 한다.
왜냐하면 아래의 코드에 해당하는 부분에서 /api 이후의 path에서 해당 라우터로 들어갈 것이라고 설정했기 때문이다.
app.use("/api", [goodsRouter]);
1. path부분 마지막에 "?데이터명=데이터내용" 으로 url로 데이터를 보낼 수 있음
2. 위의 경우처럼 라우터에 등록된 path가 "/:데이터명"과 같은 식일 경우, '/:데이터명'에 해당하는 부분에 임의의 데이터를 넣으면 그것이 데이터로써 전달됨
위 두가지의 예시)
"/goods"
http://도메인/api/goods?category=선택할카테고리명 --> 해당 카테고리에 해당하는 데이터들이 mongoDB에서 추출되어 나옴
"goods/:goodId"
http://도메인/api/goods/숫자 --> 해당 숫자의 goodsId를 가지는 데이터가 mongoDB에서 추출되어 나옴
--> goods.js파일의 내용은 아래에 있음
--> mongoDB에서 데이터를 가져와서 response하는 모듈 ( 2개의 api를 추가하는 모듈이다. )
const express = require("express");
const Goods = require("../schemas/Goods");
const router = express.Router();
router.get("/goods", async (req, res, next) => {
try {
const { category } = req.query;
const goods = await Goods.find({ category }).sort("-goodsId");
res.json({ goods: goods });
} catch (err) {
console.error(err);
next(err);
}
});
router.get("/goods/:goodsId", async (req, res) => {
const { goodsId } = req.params;
goods = await Goods.findOne({ goodsId: goodsId });
res.json({ detail: goods });
});
module.exports = router;
이 부분에서 가져올 데이터의 스키마를 가져온다.
++ express에서 라우터 객체를 가져온다.
( 메인 index.js에서는 app.get으로 라우팅하는데 반해 이렇게 외부 js로 라우팅하려면 router.get 등등을 사용하여야 한다. )
const express = require("express");
const Goods = require("../schemas/Goods");
const router = express.Router();
이 부분에서 라우팅을 한다.
그 내용은 query형식으로 데이터를 받아 그 데이터에 부합하는 정보들을 mongoDB로부터 받아서 json형태로 반환하는 것이다.
( 여기서는 category에 해당하는 데이터가 들어오고, 해당 category와 일치하는 데이터들을 mongoDB에서 찾아
goodsID를 기준으로 정렬한 후에 json형식으로 만들어 response해주고 있다. )
router.get("/goods", async (req, res, next) => {
try {
const { category } = req.query;
const goods = await Goods.find({ category }).sort("-goodsId");
res.json({ goods: goods });
} catch (err) {
console.error(err);
next(err);
}
});
이 부분 또한 라우팅을 한다.
path에서 데이터를 받아 헤당 id와 일치하는 데이터를 mongoDB로부터 받아 json형식으로 만들어 response한다.
router.get("/goods/:goodsId", async (req, res) => {
const { goodsId } = req.params;
goods = await Goods.findOne({ goodsId: goodsId });
res.json({ detail: goods });
});
라우팅을 위한 path설정 부분에서 '/:aaaa' 와 같은 식의 경우, 해당 부분에 url 정보가 데이터로서 들어오게 된다.
--> 예를 들어 위 코드에 라우팅되는 path들은 /goods/5, /goods/20 등등이다.
이때 goods뒤의 숫자 5, 20은 goodsId로써 인식되며 해당 코드로 라우팅되게 된다.
이 부분에서 위에서 라우팅한 코드들을 다른 코드에서 사용할 수 있도록 한다.
--> 즉, 메인 index.js가 라우터의 적용을 받을 수 있도록 (import할 수 있도록) 하는 부분이다.
module.exports = router;