Sequelize를 사용하여 CRUD 실행
27503 단어 expressnodepostgresjavascript
만약 당신이 계속하고 싶다면, part one부터, 만약 당신이 아직 이렇게 하지 않았다면, 당신은 첫 번째 단계에 익숙해졌다면, 당신은 이 부분으로 자유롭게 뛸 수 있다.
You can clone the complete code for this article here
종속 항목 설치
npm i express
변경될 때마다 서버를 다시 시작해서 수동으로 서버를 다시 시작하는 압력을 줄여주는 노드몬을 설치해야 합니다. npm i -D nodemon
-D
로고를 주의하십시오. 이 로고는 개발 환경에서만 가방이 필요하다는 것을 지시합니다.Express Server 설치 프로그램
서버를 설정하려면 두 개의 디렉터리 -
server
및 routes
를 만들어야 합니다.mkdir server routes
색인을 만듭니다.server
및 routes
디렉토리의 js 파일:touch server/index.js routes/index.js
다음 코드 추가routes/index.js
const { Router } = require('express');
const router = Router();
router.get('/', (req, res) => res.send('Welcome'))
module.exports = router;
다음 코드 추가server/index.js
const express = require('express');
const routes = require('../routes');
const server = express();
server.use(express.json());
server.use('/api', routes);
module.exports = server;
다음은 프로젝트의 루트 디렉터리에 응용 프로그램 입구점을 만듭니다.touch index.js
다음 코드 추가index.js
require('dotenv').config();
const server = require('./server');
const PORT = process.env.PORT || 3300;
server.listen(PORT, () => console.log(`Server is live at localhost:${PORT}`));
마지막으로 스크립트를 package.json
에 추가합니다.다음 코드 추가
package.json
"scripts": {
"start-dev": "nodemon index.js"
},
서버를 시작하려면 실행npm start-dev
이제 POSTMAN에서 액세스localhost:3300/api
를 반환하면 서버가 시작되고 실행 중임을 나타냅니다.새 게시물 만들기 [C IN CRUD]
우선 CRUD 논리를 포함하는 새 파일
"Welcome"
을 만듭니다.mkdir controllers && touch controllers/index.js
다음 코드 추가controllers/index.js
const models = require('../database/models');
const createPost = async (req, res) => {
try {
const post = await models.Post.create(req.body);
return res.status(201).json({
post,
});
} catch (error) {
return res.status(500).json({error: error.message})
}
}
module.exports = {
createPost,
}
다음은 새 게시물을 만드는 경로를 만들어야 합니다.편집controllers/index.js
은 다음과 같습니다.const { Router } = require('express');
const controllers = require('../controllers');
const router = Router();
router.get('/', (req, res) => res.send('Welcome'))
router.post('/posts', controllers.createPost);
module.exports = router;
이제 Postman에서 Create Post 끝점routes/index.js
에 액세스하여 본문에 적절한 값을 요청하면 다음 화면 캡처와 같이 새 게시물이 작성됩니다.게시물 목록 가져오기 [R in CRUD]
우리는 게시물 목록을 검색하기 위해 또 다른 단점을 만들 것이다.여기서 Sequelize가 제공하는 ORM의
[POST] localhost:330/api/posts
기능을 적용합니다.즉시 불러오는 것은 모델을 조회하는 동시에 관련 모델을 검색하는 것을 의미한다.Sequelize에서 eager loading
속성을 사용하여 다음 코드 세그먼트와 같이 즉시 불러옵니다.다음 코드를
include
에 추가합니다.const getAllPosts = async (req, res) => {
try {
const posts = await models.Post.findAll({
include: [
{
model: models.Comment,
as: 'comments'
},
{
model: models.User,
as: 'author'
}
]
});
return res.status(200).json({ posts });
} catch (error) {
return res.status(500).send(error.message);
}
}
controllers/index.js
객체에 getAllPosts
를 추가하여 내보냅니다module.exports
.module.exports = {
createPost,
getAllPosts
}
다음 코드를 routes/index.js
에 추가하여 끝점을 정의합니다.router.get('/posts', controllers.getAllPosts);
이제 Postman에서 Get All Post 끝점[GET] localhost:330/api/posts
에 액세스하면 다음과 같이 응답합니다.모든 댓글에는 댓글 그룹과 이와 관련된author 대상이 있습니다. 이것이 바로 즉시 불러오는 것입니다
단일 게시물 가져오기 [CRUD의 R]
Sequelize는 모델의 주어진 속성에 따라 단일 기록을 검색하는 방법
findOne
을 제공합니다.다음 코드 추가
controllers/index.js
const getPostById = async (req, res) => {
try {
const { postId } = req.params;
const post = await models.Post.findOne({
where: { id: postId },
include: [
{
model: models.Comment,
as: 'comments',
include: [
{
model: models.User,
as: 'author',
}
]
},
{
model: models.User,
as: 'author'
}
]
});
if (post) {
return res.status(200).json({ post });
}
return res.status(404).send('Post with the specified ID does not exists');
} catch (error) {
return res.status(500).send(error.message);
}
}
다음은 routes/index.js
에 다음 코드를 추가하여 단점을 만듭니다router.get('/posts/:postId', controllers.getPostById);
현재 Postman에서 [GET] localhost:330/api/posts/1
에 액세스할 때 다음과 같이 응답합니다.답장을 보십시오. 우리는 중첩된 실시간 불러오기를 사용하여 댓글 작성자의 평론을 얻습니다.
게시물 업데이트 [U in CRUD]
Sequelize의
update
방법은 매개 변수로 전달된 대상에 지정된 주어진 모델 필드를 업데이트합니다.이것은 update
방법에 전달되는 대상을 수동으로 검사하고 모델 필드를 업데이트하는 압력을 감소시켰다.다음 코드 추가
controllers/index.js
const updatePost = async (req, res) => {
try {
const { postId } = req.params;
const [ updated ] = await models.Post.update(req.body, {
where: { id: postId }
});
if (updated) {
const updatedPost = await models.Post.findOne({ where: { id: postId } });
return res.status(200).json({ post: updatedPost });
}
throw new Error('Post not found');
} catch (error) {
return res.status(500).send(error.message);
}
};
그리고 다음 코드를 routes/index.js
에 추가하여 끝점을 만듭니다router.put('/posts/:postId', controllers.updatePost);
게시물 삭제 [D in CRUD]
Sequelize는 모델 레코드를 삭제하는 방법
destroy
을 제공합니다.다음 코드 추가
controllers/index.js
const deletePost = async (req, res) => {
try {
const { postId } = req.params;
const deleted = await models.Post.destroy({
where: { id: postId }
});
if (deleted) {
return res.status(204).send("Post deleted");
}
throw new Error("Post not found");
} catch (error) {
return res.status(500).send(error.message);
}
};
다음과 같이 routes/index.js
업데이트를 사용합니다.router.delete('/posts/:postId', controllers.deletePost);
결론
우리는 이미 Sequelize를 사용하여 CRUD를 실현할 수 있다.그러나 간단함을 유지하기 위해 우리는 표 입력 검증, 오류 처리, 적당한 관심사 분리 등 일부 부분을 뛰어넘었다.따라서 당신은 진일보한 개선을 결정할 수 있습니다.
만약 당신에게 어떤 문제나 문장의 개선에 기여가 있다면, 언제든지 어떤 편리한 방식으로 저에게 연락하십시오.
권장 리소스
Reference
이 문제에 관하여(Sequelize를 사용하여 CRUD 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nedsoft/performing-crud-with-sequelize-29cf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)