使用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操作:
安裝必要的依賴(lài)
首先,確保你已經(jīng)安裝了Node.js。然后使用以下命令初始化一個(gè)新的Node.js項(xiàng)目并安裝依賴(lài):
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用戶(hù)名 password: '', // MySQL密碼 database: 'sportsms' // 數(shù)據(jù)庫(kù)名稱(chēng) }); // 測(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)行,訪(fǎng)問(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)文章
詳解如何在NodeJS應(yīng)用程序中處理多個(gè)API請(qǐng)求
NodeJS默認(rèn)是異步的,這意味著它已經(jīng)能夠同時(shí)處理多個(gè)請(qǐng)求,但它只適用于I/O操作,如HTTP請(qǐng)求、文件系統(tǒng)操作、數(shù)據(jù)庫(kù)查詢(xún)、實(shí)時(shí)聊天應(yīng)用等,在處理CPU密集型任務(wù)時(shí),可能需要很長(zhǎng)時(shí)間,這就是為什么NodeJS提供了一些我們將在下面介紹的特定包2023-12-12Ubuntu22.04系統(tǒng)下升級(jí)nodejs到v18版本
ubuntu默認(rèn)安裝的nodejs版本比較老,要安裝到最新的,下面這篇文章主要給大家介紹了關(guān)于Ubuntu22.04系統(tǒng)下升級(jí)nodejs到v18版本的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06node.js中的console.timeEnd方法使用說(shuō)明
這篇文章主要介紹了node.js中的console.timeEnd方法使用說(shuō)明,本文介紹了console.timeEnd的方法說(shuō)明、語(yǔ)法、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12詳解node如何讓一個(gè)端口同時(shí)支持https與http
眾所周知node是一個(gè)高性能的web服務(wù)器,使用它可以很簡(jiǎn)單的創(chuàng)建一個(gè)http或https的服務(wù)器。這篇文章主要介紹了詳解node如何讓一個(gè)端口同時(shí)支持https與http2017-07-07Node.js中如何合并兩個(gè)復(fù)雜對(duì)象詳解
下面這篇文章主要給大家介紹了在Node.js中如何合并兩個(gè)復(fù)雜對(duì)象的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友可以參考,下面來(lái)一起看看吧。2016-12-12使用?Node.js和Express搭建服務(wù)器的過(guò)程步驟詳解
Node.js?是一個(gè)開(kāi)源、跨平臺(tái)的?JavaScript?運(yùn)行時(shí)環(huán)境,這篇文章主要介紹了如何使用?Node.js和Express搭建服務(wù)器,需要的朋友可以參考下2023-09-09nvm管理node無(wú)法正常切換node版本問(wèn)題的解決方法
相信一定會(huì)有存在一些小伙伴 明明都已經(jīng)按著操作卸載node 和安裝nvm 了但是 依舊無(wú)法正常通過(guò)nvm管理node,本文將給大家介紹nvm管理node無(wú)法正常切換node版本問(wèn)題的解決方法,需要的朋友可以參考下2024-01-01Node.js 獲取微信JS-SDK CONFIG的方法示例
這篇文章主要介紹了Node.js 獲取微信JS-SDK CONFIG的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05