Express 애플리케이션에 데이터베이스 상호 작용 추가
8008 단어 programmingjavascriptwebdevnode
지금 http://jauyeung.net/subscribe/에 내 이메일 목록을 구독하십시오.
대부분의 백엔드 응용 프로그램은 데이터베이스와 상호작용을 해야만 유용한 일을 할 수 있다.Express 응용 프로그램을 사용하면 데이터베이스 상호작용을 쉽게 추가할 수 있습니다.
본 문서에서는 Express 애플리케이션을 사용하여 데이터를 가져와 SQLite 데이터베이스에 저장하는 방법을 살펴봅니다.
개시하다
우리는 먼저 프로젝트 폴더를 만들고 그 안에 들어가서 실행합니다.
npm init -y
package.json
파일을 생성합니다.-y
플래그는 기본 옵션npm init
의 모든 질문에 대한 대답만 사용합니다.다음은 Express
body-parser
를 설치하여 요청체를 분석하고 Expresssqlite3
를 설치하여 다음 명령을 실행하여 SQLite 데이터베이스와 상호 작용합니다.npm i express sqlite3 body-parser
어플리케이션 구축
코드 초기화
우리가 구축한 응용 프로그램은 데이터를 가져와
persons
데이터베이스에 저장할 것이다.우선, 우리는 응용 프로그램을 위한
app.js
을 만듭니다.그 다음에 우리는 먼저 필요한 소프트웨어 패키지를 가져오고 프로그램이 연결을 감청하는 포트를 설정하여 프로그램을 만듭니다.이를 위해 우리는 다음과 같이 덧붙였다.
const express = require('express');
const sqlite3 = require('sqlite3').verbose();
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
Expressbody-parser
와 sqlite3
를 비롯하여 이전에 설치한 패키지가 포함됩니다.그리고 Express 응용 프로그램의 실례를 만들고
port
포트 3000의 요청을 탐지하기 위해 3000으로 설정합니다.다음에 우리는 데이터베이스 초기화 코드를 만들 것이다.우리는 글을 써서 이 점을 해냈다.
const db = new sqlite3.Database('db.sqlite');
위의 코드는 응용 프로그램이 db.sqlite
를 사용하여 데이터를 가져오고 저장할 것이라고 알려 줍니다.존재하지 않으면 동적으로 생성되기 때문에 미리 만들 필요가 없습니다.또한 데이터베이스 파일을 사용할 어떠한 증거도 필요하지 않습니다.그리고
person
테이블이 존재하지 않으면 다음과 같이 만듭니다.db.serialize(() => {
db.run('CREATE TABLE IF NOT EXISTS persons (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)');
});
우리는 개인 데이터를 저장하는 데 사용되는 id
자동 증가 정수열 name
과 age
열이 있다.우리는
IF NOT EXISTS
조회에 CREATE TABLE
를 포함하여 응용 프로그램이 다시 시작될 때마다 데이터베이스를 만들려고 하지 않습니다.만약 시계가 이미 존재한다면, 조회는 실패할 것이다.그리고 우리는
body-parser
중간부품을 가입하여 JSON 요청 주체가 req.body
대상으로 해석될 것이다. 다음과 같다.app.use(bodyParser.json());
노선 추가
현재 데이터를 가져오고 저장하는 경로를 추가합니다.
먼저, 우리는
persons
테이블에서 데이터를 가져오는 GET 요청을 처리하는 루트를 추가했고, 다음과 같은 내용을 추가했다.app.get('/', (req, res) => {
db.serialize(() => {
db.all('SELECT * FROM persons', [], (err, rows) => {
res.json(rows);
});
})
})
우리는 app.get
를 사용하여 /
루트의 GET 요청을 처리합니다.db.serialize
리셋 중인 모든 조회가 순서대로 실행되도록 하세요.그리고 우리는
persons
표에서 모든 줄을 선택하고 응답으로 되돌아오는 그룹을 보냅니다.그런 다음 새 항목을 데이터베이스에 저장하는 POST 요청을 처리하기 위해 POST 라우트를 추가합니다.
app.post('/', (req, res) => {
const { name, age } = req.body;
db.serialize(() => {
const stmt = db.prepare('INSERT INTO persons (name, age) VALUES (?, ?)');
stmt.run(name, age);
stmt.finalize();
res.json(req.body);
})
})
POST 요청을 처리 중이라는 의미로 먼저 app.post
를 사용합니다./
는 /
경로에 대한 요청을 처리한다는 것을 의미합니다.다음에 우리는 다음과 같은 방식으로
body-parser
귀환하는 해석 JSON 요청체를 얻을 것이다.const { name, age } = req.body;
우리는 분해 할당 산자로 필드를 변수로 분해한다.다음에 우리는
persons
로 데이터를 db.prepare
표에 삽입할 준비된 문장을 만듭니다.이렇게 하면 ?
에 표시된 자리 표시자에 데이터를 설정할 수 있고, SQL 주입 공격을 피하기 위해 데이터를 정리할 수 있다.그런 다음 다음,
stmt.run(name, age);
stmt.finalize();
이 문장을 실행하고 res.json(req.body);
응답을 되돌려줍니다.그런 다음 라우트를 추가하여 항목을 업데이트합니다.
app.put('/:id', (req, res) => {
const { name, age } = req.body;
const { id } = req.params;
db.serialize(() => {
const stmt = db.prepare('UPDATE persons SET name = ?, age = ? WHERE id = ?');
stmt.run(name, age, id);
stmt.finalize();
res.json(req.body);
})
})
위의 POST 요청 경로와 유사하지만 PUT 요청을 처리 중입니다.URL 매개 변수 중 하나
:id
가 다음과 같은 방법으로 제공됩니다.const { id } = req.params;
그래서 우리가 /1
에 요청을 할 때id
는 1로 설정됩니다.그리고 우리는
name
, age
와 id
를 사용하여 업데이트 문장을 실행하고 요청 주체를 응답으로 되돌려줍니다.마지막으로 삭제 경로가 생겨서
persons
테이블에서 항목을 다음과 같이 삭제할 수 있습니다.app.delete('/:id', (req, res) => {
const { id } = req.params;
db.serialize(() => {
const stmt = db.prepare('DELETE FROM persons WHERE id = ?');
stmt.run(id);
stmt.finalize();
res.json(req.body);
})
})
이것은 다른 루트와 유사합니다. 단지 delete 요청이 있고 ID를 사용하여 delete 문장을 실행합니다.그리고 우리는 주체를 응답으로 되돌려 달라고 요청할 것이다.
마지막으로 다음 행을 추가합니다.
const server = app.listen(port);
따라서, 우리가 실행할 때 node app.js
, 우리의 응용 프로그램은 실행될 것이다.결론
우리는 달리기
node app.js
를 통해 프로그램을 실행한다.마지막으로 만약에 우리가 모든 물건을 한데 놓으면 다음과 같은 코드가 있습니다.
const express = require('express');
const sqlite3 = require('sqlite3').verbose();
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
const db = new sqlite3.Database('db.sqlite');
db.serialize(() => {
db.run('CREATE TABLE IF NOT EXISTS persons (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)');
});
app.use(bodyParser.json());
app.get('/', (req, res) => {
db.serialize(() => {
db.all('SELECT * FROM persons', [], (err, rows) => {
res.json(rows);
});
})
})
app.post('/', (req, res) => {
const { name, age } = req.body;
db.serialize(() => {
const stmt = db.prepare('INSERT INTO persons (name, age) VALUES (?, ?)');
stmt.run(name, age);
stmt.finalize();
res.json(req.body);
})
})
app.put('/:id', (req, res) => {
const { name, age } = req.body;
const { id } = req.params;
db.serialize(() => {
const stmt = db.prepare('UPDATE persons SET name = ?, age = ? WHERE id = ?');
stmt.run(name, age, id);
stmt.finalize();
res.json(req.body);
})
})
app.delete('/:id', (req, res) => {
const { id } = req.params;
db.serialize(() => {
const stmt = db.prepare('DELETE FROM persons WHERE id = ?');
stmt.run(id);
stmt.finalize();
res.json(req.body);
})
})
const server = app.listen(port);
일단 데이터베이스 라이브러리를 포함하면 데이터베이스와 상호작용하는 Express 응용 프로그램을 만들어서 응용 프로그램을 더욱 유용하게 할 수 있습니다.
Reference
이 문제에 관하여(Express 애플리케이션에 데이터베이스 상호 작용 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aumayeung/adding-database-interactions-to-express-apps-4fah텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)