11. 요청 및 사용자 간 데이터 공유
지금까지, title이라는 이름을 가진 input란에서 유저의 입력이 들어오면, 아래와 같이 로그를 남기고 다시 main page로 돌아가는 response를 보내주었습니다.
-admin.js
router.post("/add-product", (req, res, next) => {
console.log(req.body); //유저의 입력값을 받아 로그를 남김
products.push({ titls: req.body.title });
res.redirect("/");
});
이제는, 유저의 입력값을 보다 더 값어치 있게 사용하고 입력값에 적합한 response를 보내주기 위해 입력값을 변숫값에 저장해보도록 하겠습니다. 아래와 같이 입력값을 저장할 배열을 하나 선언해주었습니다.
-admin.js
const products = [];
그 후 products를 export 해주기 위해 아래와 같이 추가해줍니다. 기존에 있었던 router export와 다른 신텍스를 사용하여 선언하였지만, 같은 의미입니다.
-admin.js
// module.exports = router;
exports.routes = router;
exports.products = products;
유저의 입력값을 받아 저장할 배열을 만들었으니, 이제 router의 로직을 추가해 보겠습니다.
-admin.js
router.post("/add-product", (req, res, next) => {
console.log(req.body);
products.push({ title: req.body.title }); //추가사항
res.redirect("/");
});
admin에서 export한 routes와 products를 app에서 가져와 쓰기 위해 아래와 같이 코드를 변경해줍니다. adminRoutes라는 이름보단 더 직관적으로 볼 수 있게 adminData로 변경을 해주었습니다. 주석처리된 부분이 이전 코드, 주석 바로 아랫줄이 변경된 코드입니다.
-app.js
const express = require("express");
const bodyParser = require("body-parser");
const path = require("path");
const app = express();
// const adminRoutes = require("./route/admin");
const adminData = require("./routes/admin");
const shopRoutes = require("./routes/shop");
app.use(bodyParser.urlencoded({ extended: false }));
// app.use("/admin", adminRoutes);
app.use("/admin", adminData.routes);
app.use(shopRoutes);
app.use((req, res, next) => {
res.status(404).sendFile(path.join(__dirname, "views", "404.html"));
});
app.listen(3000);
export된 products 배열을 유저에게 다시 보여줄 수 있도록 하기 위해 아래처럼 두 줄을 추가하고 간단하게 다시 console.log를 통해 로그를 남겨보도록 하겠습니다.
-shop.js
const path = require("path");
const express = require("express");
const router = express.Router();
const adminData = require("./admin"); //추가사항
router.get("/", (req, res, next) => {
// res.sendFile('/views/shop/html');
console.log('shop.js log: ', adminData.products); //추가사항
res.sendFile(path.join(__dirname, "../", "views", "shop.html"));
});
module.exports = router;