본문 바로가기

카테고리 없음

[Node.js] 요청 및 사용자 간 데이터 공유

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;