使用node.js實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行CRUD操作
在JavaScript中直接連接數(shù)據(jù)庫(kù)并進(jìn)行增刪改查(CRUD)操作通常不推薦這么做,因?yàn)镴avaScript(尤其是前端JavaScript)無(wú)法直接連接數(shù)據(jù)庫(kù),出于安全性和架構(gòu)設(shè)計(jì)考慮。一般來(lái)說(shuō),應(yīng)該通過(guò)后端服務(wù)(例如Node.js、Express等)來(lái)與數(shù)據(jù)庫(kù)進(jìn)行交互,前端通過(guò)API請(qǐng)求與后端通信。
以下是一個(gè)完整的示例,展示如何使用Node.js與MySQL數(shù)據(jù)庫(kù)進(jìn)行CRUD操作:
安裝必要的依賴
首先,確保你已經(jīng)安裝了Node.js。然后使用以下命令初始化一個(gè)新的Node.js項(xiàng)目并安裝依賴:
npm init -y npm install express mysql2 body-parser
創(chuàng)建數(shù)據(jù)庫(kù)(MySQL)
在MySQL中創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)和表,例如:
CREATE DATABASE sportsms;
USE sportsms;
???????CREATE TABLE athletes (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
age INT,
event VARCHAR(100)
);創(chuàng)建Node.js應(yīng)用
創(chuàng)建一個(gè)名為 app.js 的文件,示例代碼如下:
const express = require('express');
const mysql = require('mysql2');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
// 使用body-parser來(lái)解析JSON請(qǐng)求體
app.use(bodyParser.json());
// 創(chuàng)建數(shù)據(jù)庫(kù)連接池
const db = mysql.createPool({
host: 'localhost',
user: 'root', // MySQL用戶名
password: '', // MySQL密碼
database: 'sportsms' // 數(shù)據(jù)庫(kù)名稱
});
// 測(cè)試數(shù)據(jù)庫(kù)連接
db.getConnection((err, connection) => {
if (err) {
console.error('數(shù)據(jù)庫(kù)連接失敗:', err.stack);
return;
}
console.log('成功連接到數(shù)據(jù)庫(kù)');
connection.release();
});
// 創(chuàng)建選手(增)
app.post('/athletes', (req, res) => {
const { name, age, event } = req.body;
const query = 'INSERT INTO athletes (name, age, event) VALUES (?, ?, ?)';
db.query(query, [name, age, event], (err, result) => {
if (err) {
return res.status(500).json({ error: '數(shù)據(jù)庫(kù)錯(cuò)誤', details: err });
}
res.status(201).json({ id: result.insertId, name, age, event });
});
});
// 獲取所有選手(查)
app.get('/athletes', (req, res) => {
db.query('SELECT * FROM athletes', (err, results) => {
if (err) {
return res.status(500).json({ error: '數(shù)據(jù)庫(kù)錯(cuò)誤', details: err });
}
res.json(results);
});
});
// 獲取單個(gè)選手(查)
app.get('/athletes/:id', (req, res) => {
const { id } = req.params;
db.query('SELECT * FROM athletes WHERE id = ?', [id], (err, results) => {
if (err) {
return res.status(500).json({ error: '數(shù)據(jù)庫(kù)錯(cuò)誤', details: err });
}
if (results.length === 0) {
return res.status(404).json({ error: '選手未找到' });
}
res.json(results[0]);
});
});
// 更新選手(改)
app.put('/athletes/:id', (req, res) => {
const { id } = req.params;
const { name, age, event } = req.body;
const query = 'UPDATE athletes SET name = ?, age = ?, event = ? WHERE id = ?';
db.query(query, [name, age, event, id], (err, result) => {
if (err) {
return res.status(500).json({ error: '數(shù)據(jù)庫(kù)錯(cuò)誤', details: err });
}
if (result.affectedRows === 0) {
return res.status(404).json({ error: '選手未找到' });
}
res.json({ id, name, age, event });
});
});
// 刪除選手(刪)
app.delete('/athletes/:id', (req, res) => {
const { id } = req.params;
db.query('DELETE FROM athletes WHERE id = ?', [id], (err, result) => {
if (err) {
return res.status(500).json({ error: '數(shù)據(jù)庫(kù)錯(cuò)誤', details: err });
}
if (result.affectedRows === 0) {
return res.status(404).json({ error: '選手未找到' });
}
res.status(204).send();
});
});
// 啟動(dòng)服務(wù)器
app.listen(port, () => {
console.log(`服務(wù)器正在運(yùn)行,訪問(wèn) http://localhost:${port}`);
});
啟動(dòng)服務(wù)器
在命令行中,運(yùn)行以下命令啟動(dòng)服務(wù)器:
node app.js
測(cè)試API
你可以使用工具如Postman或者直接用 curl 來(lái)測(cè)試API。以下是各個(gè)操作的示例請(qǐng)求:
增 - 創(chuàng)建選手:
POST /athletes
請(qǐng)求體(JSON):
{
"name": "John Doe",
"age": 25,
"event": "100m Sprint"
}查 - 獲取所有選手:
GET /athletes
響應(yīng)(JSON):
[
{
"id": 1,
"name": "John Doe",
"age": 25,
"event": "100m Sprint"
}
]查 - 獲取單個(gè)選手:
GET /athletes/1
響應(yīng)(JSON):
{
"id": 1,
"name": "John Doe",
"age": 25,
"event": "100m Sprint"
}改 - 更新選手信息:
PUT /athletes/1
請(qǐng)求體(JSON):
{
"name": "John Doe",
"age": 26,
"event": "200m Sprint"
}刪 - 刪除選手:
DELETE /athletes/1
這就是一個(gè)簡(jiǎn)單的Node.js和MySQL連接并進(jìn)行增刪改查(CRUD)操作的完整示例。你可以通過(guò)前端使用JavaScript發(fā)送HTTP請(qǐng)求與后端交互。注意,直接在前端處理數(shù)據(jù)庫(kù)操作是不安全的,前端應(yīng)僅通過(guò)API請(qǐng)求與后端交互。
到此這篇關(guān)于使用node.js實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行CRUD操作的文章就介紹到這了,更多相關(guān)node.js數(shù)據(jù)庫(kù)CRUD操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用npm-run實(shí)現(xiàn)自動(dòng)化任務(wù)的方法示例
這篇文章主要介紹了用npm-run實(shí)現(xiàn)自動(dòng)化任務(wù)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Nodejs+Socket.io實(shí)現(xiàn)通訊實(shí)例代碼
本篇文章主要介紹了Nodejs+Socket.io實(shí)現(xiàn)通訊實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
node?NPM庫(kù)glob通配符匹配文件名minimatch模式匹配字符串學(xué)習(xí)
這篇文章主要為大家介紹了node?NPM庫(kù)glob通配符匹配文件名minimatch模式匹配字符串學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
node.js中的fs.statSync方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.statSync方法使用說(shuō)明,本文介紹了fs.statSync的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
Node使用Nodemailer發(fā)送郵件的方法實(shí)現(xiàn)
這篇文章主要介紹了Node使用Nodemailer發(fā)送郵件的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
在Node.js文件上傳中集成ClamAV掃描的詳細(xì)步驟
本文介紹了在Node.js文件上傳中集成ClamAV掃描的具體步驟,包括安裝、使用、Express集成和遠(yuǎn)程掃描等,該庫(kù)在文件落盤前完成掃描,返回類型化的verdictsymbol,不依賴第三方運(yùn)行時(shí),需要的朋友可以參考下2026-04-04
windows離線環(huán)境安裝node-sass全過(guò)程
文章介紹了如何在Windows系統(tǒng)上安裝和配置node-sass,并提供了一個(gè)詳細(xì)的步驟指南,首先,通過(guò)命令行查看支持版本;然后,下載對(duì)應(yīng)版本的node-sass安裝包;接著,在npm配置文件中增加SASS_BINARY_PATH路徑配置;最后,執(zhí)行npmi命令完成安裝2024-12-12
關(guān)于express與koa的使用對(duì)比詳解
很多人都在問(wèn)到底該用Koa還是express,所以下面這篇文章就來(lái)給大家再次的對(duì)比了關(guān)于express與koa的相關(guān)資料,通過(guò)對(duì)比大家可以更好的進(jìn)行選擇,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法
本篇文章主要介紹了用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08

