مقدمة: اتباع Nodejs السابق مرحبا ، العالم! يمكننا أيضًا رؤية ميزات قوية أخرى. مع شعبية مجتمع NodeJS الحالية ودعم عدد كبير من المهندسين ، تم تقديم عدد كبير من الوحدات النمطية تدريجياً.
المحتوى: يوضح ما يلي التفاعل بين NodeJS و MySQL.
في هذا الوقت ، تحتاج إلى إضافة وحدة MySQL إلى NodeJS. في هذا الوقت ، تم تنشيط NPM (مدير حزمة العقدة) المذكورة في الفصل السابق.
قم بتثبيت وحدة MySQL في nodejs:
نسخة الكود كما يلي:
$ NPM تثبيت MySQL
JS Script Mysqltest.js
نسخة الكود كما يلي:
// mysqltest.js
// تحميل وحدة MySQL
var client = require ('mysql'). العميل ،
العميل = عميل جديد () ،
// اسم قاعدة البيانات المراد إنشاؤه
test_database = 'nodejs_mysql_test' ،
// اسم الجدول المراد إنشاؤه
test_table = 'test' ؛
//اسم المستخدم
client.user = 'root' ؛
//كلمة المرور
client.password = 'root' ؛
// إنشاء اتصال
client.connect () ؛
client.query ('إنشاء قاعدة بيانات'+test_database ، الدالة (err) {
if (err && err.number! = client.error_db_create_exists) {
رمي الخطأ
}
}) ؛
// إذا لم يتم توفير رد اتصال ، فسيتم تنبعث أي أخطاء على أنها "خطأ"
// أحداث العميل
client.query ('use'+test_database) ؛
client.query (
"إنشاء جدول"+test_table+
"(ID int (11) Auto_increment ،"+
"العنوان varchar (255) ،"+
"نص نص ،"+
"تم إنشاء DateTime ،"+
"المفتاح الأساسي (المعرف))"
) ؛
client.query (
"أدخل في"+test_table+''+
"تعيين العنوان =؟ ، text =؟ ، تم إنشاؤه =؟ '،
["Super Cool" ، "هذا نص لطيف" ، 2010-08-16 10:00:23 "]
) ؛
var query = client.query (
"أدخل في"+test_table+''+
"تعيين العنوان =؟ ، text =؟ ، تم إنشاؤه =؟ '،
["إدخال آخر" ، لأن الإدخالات تقومان باختبار أفضل "، 2010-08-16 12:42:15"]
) ؛
client.query (
"حدد * من"+test_table ،
وظيفة selectcb (err ، النتائج ، الحقول) {
إذا (خطأ) {
رمي الخطأ
}
console.log (النتائج) ؛
console.log (الحقول) ؛
client.end () ؛
}
) ؛
تنفيذ البرامج النصية
نسخة الكود كما يلي:
عقدة mysqltest.js
الآثار هي كما يلي:
// mysql-demo.js
const mysql = require ('mysql2/promise') ؛ // استخدم MySQL2 الذي يدعم الوعد
تتطلب ('dotenv'). config () ؛ // إدارة متغير البيئة
// استخدم مجموعة الاتصال لتحسين الأداء
const pool = mysql.createpool ({
المضيف: Process.env.db_host || "المضيف المحلي" ،
المستخدم: process.env.db_user || 'جذر'،
كلمة المرور: process.env.db_password || 'جذر'،
قاعدة البيانات: process.env.db_name || 'nodejs_mysql_test' ،
WaitforConnections: صحيح ،
ConnectionLimit: 10 ،
Queuelimit: 0
}) ؛
// تعريف هيكل الجدول (إدارة DDL)
const table_schema = `
قم بإنشاء جدول إذا لم يكن موجودًا (
المعرف int المفتاح الأساسي Auto_increment ،
العنوان Varchar (255) ليس فارغًا ،
نص المحتوى ،
Create_at DateTime Default Current_timestamp ،
updated_at dateTime on Update Current_timestamp
) المحرك = innodb الافتراضي charset = utf8mb4 collate = utf8mb4_unicode_ci ؛
`؛
// تغليف منطق الأعمال
فئة postdao {
مُنشئ (تجمع) {
this.pool = pool ؛
}
Async تهيئة () {
في انتظار this.pool.execute (table_schema) ؛
console.log ('table expiled/created') ؛
}
Async CreatePost (post) {
const [النتيجة] = في انتظار this.pool.execute (
`` `in to posts (title ، content)
القيم (؟ ،؟) `،
[post.title ، post.content]
) ؛
return {... post ، id: result.insertid} ؛
}
getPosts Async (صفحة = 1 ، pagesize = 10) {
const offset = (صفحة - 1) * pagesize ؛
const [صفوف] = انتظر هذا. pool.execute (
`حدد * من المنشورات
order by create_at desc
حد ؟ إزاحة؟ `،
[Pagesize ، تعويض]
) ؛
عودة الصفوف.
}
Async TransactionDemo () {
const conn = في انتظار this.pool.getConnection () ؛
يحاول {
في انتظار conn.begintransaction () ؛
// عملية المعاملة 1
في انتظار conn.execute (
`` `in to posts (title ، content)
القيم (؟ ،؟) `،
["المعاملة 1" ، "العمليات الذرية العرض التوضيحي"]
) ؛
// عملية المعاملة 2
const [النتيجة] = انتظر conn.execute (
`تحديث منشورات تعيين المحتوى =؟
أين العنوان =؟ `،
["المحتوى المحدث" ، "المعاملة 1"]
) ؛
في انتظار conn.Commit () ؛
نتيجة العودة
} catch (err) {
في انتظار conn.rollback () ؛
رمي الخطأ
} أخيراً {
conn.Release () ؛
}
}
}
// مثال التنفيذ
(Async () => {
يحاول {
const dao = new postdao (pool) ؛
في انتظار dao.initialize () ؛
// إنشاء مقالة جديدة
const newPost = في انتظار dao.createpost ({
العنوان: 'Modern Node.js mysql guide' ،
المحتوى: "أفضل الممارسات لعمليات قاعدة البيانات"
}) ؛
console.log ('تم إنشاء post:' ، newPost) ؛
// استعلام ترقيم الصفحات
const posts = await dao.getPosts () ؛
console.log ('نتائج الصفحة الأولى:' ، المشاركات) ؛
// عرض المعاملة
const txresult = في انتظار dao.transactionDemo () ؛
console.log ("المعاملة المكتملة:" ، txresult) ؛
// الاستعلام النهائي
const FinalPosts = await dao.getPosts () ؛
console.log ("المشاركات النهائية:" ، FinalPosts) ؛
} catch (err) {
console.error ('خطأ في التطبيق:' ، err) ؛
} أخيراً {
Await Pool.end () ؛
}
}) () ؛