Express 애플리케이션에 데이터베이스 상호 작용 추가

아마존에서 내 책 보기https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62
지금 http://jauyeung.net/subscribe/에 내 이메일 목록을 구독하십시오.
대부분의 백엔드 응용 프로그램은 데이터베이스와 상호작용을 해야만 유용한 일을 할 수 있다.Express 응용 프로그램을 사용하면 데이터베이스 상호작용을 쉽게 추가할 수 있습니다.
본 문서에서는 Express 애플리케이션을 사용하여 데이터를 가져와 SQLite 데이터베이스에 저장하는 방법을 살펴봅니다.

개시하다
우리는 먼저 프로젝트 폴더를 만들고 그 안에 들어가서 실행합니다.
npm init -y
package.json 파일을 생성합니다.-y 플래그는 기본 옵션npm init의 모든 질문에 대한 대답만 사용합니다.
다음은 Expressbody-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-parsersqlite3를 비롯하여 이전에 설치한 패키지가 포함됩니다.
그리고 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 자동 증가 정수열 nameage 열이 있다.
우리는 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, ageid를 사용하여 업데이트 문장을 실행하고 요청 주체를 응답으로 되돌려줍니다.
마지막으로 삭제 경로가 생겨서 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 응용 프로그램을 만들어서 응용 프로그램을 더욱 유용하게 할 수 있습니다.

좋은 웹페이지 즐겨찾기