Postgres를 사용한 Node.js Rest CRUD API

7482 단어 postgresnoderestapi
PostgreSQL은 강력한 오픈 소스 개체 관계형 데이터베이스 시스템으로 안정성, 기능 견고성 및 성능에 대한 강력한 명성을 얻었습니다. 이 기사에서는 Notes를 생성, 검색, 업데이트 및 삭제할 수 있는 Rest API를 빌드합니다.

먼저 익스프레스 라우터를 사용하여 익스프레스 서버 및 경로 설정을 시작합니다. 다음으로 PostgreSQL 데이터베이스에 대한 구성을 추가하고 Sequelize로 Note Model을 생성합니다. 마지막에 우리의 파일 구조는


익스프레스 서버를 생성하고 필요한 종속성을 설치하려면 터미널 유형에

mkdir postgres-crud
cd postgres-crud
npm init -y
touch server.js
mkdir app
npm i express cors body-parser pg pg-hstore [email protected]


이렇게 하면 postgres-crud라는 폴더가 생성되고 노드 프로젝트가 초기화되며 필요한 종속 항목이 설치됩니다. 이제 익스프레스 서버 코드를 설정하고 경로를 구성해야 합니다. 서버를 설정하려면 server.js 파일을 다음과 같이 편집하십시오.

// Bring in required Modules
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");

const app = express();

// Bring in the route
const routes = require("./app/routes");

var corsOptions = {
  origin: "http://localhost:8081",
};

app.use(cors(corsOptions));

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: true }));

const db = require("./app/models");
db.sequelize.sync();

app.use("/api/notes", routes);

// Define PORT
const PORT = process.env.PORT || 8080;

// Listen to the defined PORT
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});



이제 경로를 설정하기 위해 앱 폴더에 경로라는 폴더를 만들고 경로 폴더 아래에 index.js라는 파일을 만듭니다. 편집기를 통해 이 모든 작업을 수행하거나 터미널에 다음 명령을 입력할 수 있습니다.

mkdir app/routes
touch app/routes/index.js


이제 app/routes/index.js 파일을 다음과 같이 편집하십시오.

// Bring in the express server
const express = require("express");

// Bring in the Express Router
const router = express.Router();

// Import the Controller
const controller = require("../controllers");


// Create a new Note
router.post("/", controller.create);

// Get all Notes
router.get("/", controller.findAll);

// Get Note by Id
router.get("/:id", controller.findOne);

// Modify existing Note
router.put("/:id", controller.update);

// Delete Note by Id
router.delete("/:id", controller.delete);

module.exports = router;



이제 다음 단계는 데이터베이스를 구성하는 것입니다. 이를 위해 app 폴더 안에 config 폴더를 만든 다음 config 폴더 아래에 db.config.js 파일을 만듭니다. 명령줄을 통해 이를 수행하려면

mkdir app/config
touch app/config/db.config.js


이제 아래와 같이 db.config.js 파일을 편집합니다. HOST, USER, PASSWORD 값을 자신의 db 값으로 바꿔야 합니다.

module.exports = {
  HOST: "localhost", // Replace it with your own host address
  USER: "user123", // Replace with your own username
  PASSWORD: "12345", // Replace with your own password
  DB: "testdb",
  dialect: "postgres",
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000,
  },
};



이제 db 설정 부분은 끝났습니다. 다음은 db 모델을 정의하는 것입니다. 이렇게 하려면 앱 폴더 안에 모델이라는 폴더를 만들고 index.js 및 notes.model.js라는 두 파일을 초기화합니다. 이제 index.js 파일을 다음과 같이 편집하십시오.

const dbConfig = require("../config/db.config");

const Sequelize = require("sequelize");
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
  host: dbConfig.HOST,
  dialect: dbConfig.dialect,
  operatorAliases: 0,

  pool: {
    max: dbConfig.pool.max,
    min: dbConfig.pool.min,
    acquire: dbConfig.pool.acquire,
    idle: dbConfig.pool.idle,
  },
});

const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;

db.notes = require("./notes.model.js")(sequelize, Sequelize);
module.exports = db;



또한 notes.model.js 파일을 다음과 같이 편집하십시오.

const { sequelize, Sequelize } = require(".");

module.exports = (sequelize, Sequelize) => {
  const Note = sequelize.define("note", {
    title: {
      type: Sequelize.STRING,
    },
    description: {
      type: Sequelize.STRING,
    },
    published: {
      type: Sequelize.BOOLEAN,
    },
  });
  return Note;
};



이제 모델이 모두 설정되었습니다. 마지막으로 해야 할 일은 컨트롤러를 정의하는 것입니다. 이렇게 하려면 app 폴더 안에 controllers라는 폴더를 만들고 controllers 폴더 안에 index.js라는 파일을 초기화합니다. index.js 파일을 다음과 같이 편집합니다.

const db = require("../models");
const Notes = db.notes;
const Op = db.Sequelize.Op;

exports.create = (req, res) => {
  if (!req.body.title) {
    res.status(400).send({
      message: "Content can not be empty !",
    });
    return;
  }

  const note = {
    title: req.body.title,
    description: req.body.description,
    published: req.body.published ? req.body.published : false,
  };

  Notes.create(note)
    .then((data) => {
      res.send(data);
    })
    .catch((err) => {
      res.status(500).send({
        message: err.message || "Some error occurred while create the Notes",
      });
    });
};

exports.findAll = (req, res) => {
  const title = req.query.title;

  Notes.findAll()
    .then((data) => {
      res.send(data);
    })
    .catch((err) => {
      res.status(500).send({
        message: err.message || "Some error occured while retrieving Notes",
      });
    });
};

exports.findOne = (req, res) => {
  const id = req.params.id;
  Notes.findByPk(id)
    .then((data) => {
      res.send(data);
    })
    .catch((err) => {
      res.status(500).send({
        message: "Error retrieving Notes with id=" + id,
      });
    });
};

exports.update = (req, res) => {
  const id = req.params.id;

  Notes.update(req.body, {
    where: { id: id },
  }).then((data) => {
    if (data) {
      res.send({
        message: "Note was updated successfully",
      });
    } else {
      res.send({
        message: `Cannot update Note with id=${id}`,
      });
    }
  });
};

exports.delete = (req, res) => {
  const id = req.params.id;

  Notes.destroy({
    where: { id: id },
  }).then((data) => {
    if (data) {
      res.send({
        message: "Note was delete successfully!",
      });
    } else {
      res.send({
        message: `Cannot delete Note with id=${id}`,
      });
    }
  });
};



이제 드디어 애플리케이션을 실행할 수 있습니다. 실행하려면

node server.js


db에 대한 유효한 자격 증명을 제공하고 단계를 올바르게 수행한 경우 서버가 포트 8080에서 실행 중이라는 메시지가 표시되고 Postman에서 엔드포인트를 테스트할 수 있습니다. 테스트 결과는 create 및 getAll 메서드에 대한 내 것과 유사합니다.





Thanks for reading. You can find the code for the tutorial on Github

좋은 웹페이지 즐겨찾기