본문 바로가기
데이터베이스

mongoose-express 데이터 조회 페이지

by 즐거운코딩 2023. 8. 5.
반응형

mongo DB에 저장된 데이터를 조회하여 웹페이지에 간단하게 표출해 봅니다.

라우트를 적용 (url : localhost:3000/products)하여 콜백을 이용해서 데이터 조회되도록 아래와 같이 작성합니다.

데이터베이스에서 조회하기 때문에 조회시간을 고려하여 비동기 조회로 async /await 을 사용합니다.

const express = require("express");
const app = express();
const path = require("path");
const Product = require("./models/product");

const mongoose = require("mongoose");
mongoose
  .connect("mongodb://127.0.0.1:27017/farmStand", { useNewUrlParser: true })
  .then(() => {
    console.log("mongo connection open !!!");
  })
  .catch((err) => {
    console.log("OH NO mongo connection error !!!");
    console.log(err);
  });

app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");

app.get("/products", async (req, res) => {
  const products = await Product.find({});
  console.log(products);
  res.send("ALL PRODUCTS WILL BE HERE!");
});

app.listen(3000, () => {
  console.log("APP IS LISTENING ON PORT 3000!");
});

>nodemon index.js 로 서버를 실행하면 Prooducts 데이터를 불러옵니다. 

웹페이지 localhost:3000/products 접속하면 정상 표출되는 것을 볼 수 있습니다.

실제 데이터를 불러와서 페이지에 보여주기 위해서 views>products 폴더를 만들고, index.ejs 파일을 다음과 같이 만듭니다.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>All Produtcs</title>
  </head>
  <body>
    <h1>All Products!</h1>
    <ul>
      <% for (let product of products) { %>
      <li><%=product.name %></li>
      <% } %>
    </ul>
  </body>
</html>

해당 파일을 라우트에 적용합니다. index.js 파일에 라우트의 응답으로 products/index.ejs 를 불러오고 index.ejs로 데이터베이스에서 조회된 products 데이터를 전달합니다.

(...)
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");

app.get("/products", async (req, res) => {
  const products = await Product.find({});
  res.render("products/index", { products });
});
(...)

다음과 같이 products 라우트 조회 시 proudct 목록이 조회됩니다.

 

반응형