Postgres를 사용한 Node.js Rest CRUD 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
Reference
이 문제에 관하여(Postgres를 사용한 Node.js Rest CRUD API), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rajandmr/node-js-rest-crud-api-with-postgres-213p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)