Hướng dẫn node js best mysql module - nút js mô-đun mysql tốt nhất
Node.js có thể được sử dụng trong các ứng dụng cơ sở dữ liệu. Show
Một trong những cơ sở dữ liệu phổ biến nhất là MySQL. Cơ sở dữ liệu MySQLĐể có thể thử nghiệm các ví dụ mã, bạn nên cài đặt MySQL trên máy tính của mình. Bạn có thể tải xuống cơ sở dữ liệu MySQL miễn phí tại https://www.mysql.com/doads/. Cài đặt trình điều khiển MySQLKhi bạn đã chạy và chạy trên máy tính của mình, bạn có thể truy cập nó bằng cách sử dụng Node.js. Để truy cập cơ sở dữ liệu MySQL với Node.js, bạn cần trình điều khiển MySQL. Hướng dẫn này sẽ sử dụng mô -đun "MySQL", được tải xuống từ NPM. Để tải xuống và cài đặt mô -đun "MySQL", hãy mở thiết bị đầu cuối lệnh và thực hiện các mục sau: C: \ Users \ Your Name> NPM Cài đặt MySQL Bây giờ bạn đã tải xuống và cài đặt trình điều khiển cơ sở dữ liệu MySQL. Node.js có thể sử dụng mô -đun này để thao tác cơ sở dữ liệu MySQL: var mysql = yêu cầu ('mysql'); Tạo kết nốiBắt đầu bằng cách tạo kết nối với cơ sở dữ liệu. Sử dụng tên người dùng và mật khẩu từ cơ sở dữ liệu MySQL của bạn. demo_db_connection.js var mysql = yêu cầu ('mysql'); Tạo kết nối Bắt đầu bằng cách tạo kết nối với cơ sở dữ liệu. Sử dụng tên người dùng và mật khẩu từ cơ sở dữ liệu MySQL của bạn. var con = mysql.createConnection ({& nbsp; host: "localhost", & nbsp; user: "yourusername", & nbsp; mật khẩu: "yourPassword"}); con.connect (function (err) {& nbsp; if (err) ném err; & nbsp; console.log ("kết nối!");}); Chạy ví dụ » Lưu mã ở trên trong một tệp có tên là "demo_db_connection.js" và chạy tệp: Chạy "demo_db_connection.js" C: \ Users \ Your Name> Node demo_db_connection.jsĐiều này sẽ cung cấp cho bạn kết quả này: Bây giờ bạn có thể bắt đầu truy vấn cơ sở dữ liệu bằng các câu lệnh SQL. Truy vấn một cơ sở dữ liệu Sử dụng các câu lệnh SQL để đọc từ (hoặc ghi cho) cơ sở dữ liệu MySQL. Điều này cũng được gọi là "Truy vấn" cơ sở dữ liệu. Đối tượng kết nối được tạo trong ví dụ trên, có một phương thức truy vấn cơ sở dữ liệu: con.connect (function (err) {& nbsp; if (err) ném err; & nbsp; console.log ("kết nối!"); & nbsp; con.Query (sql, function (err, result) ; if (err) ném err; & nbsp; & nbsp; console.log ("kết quả:" + kết quả); & nbsp;});}); Mục lục
Cài đặtGiới thiệu Người đóng góp Nhà tài trợ Cộng đồng Thiết lập kết nối
Giới thiệuNgười đóng góp Nhà tài trợ
Cộng đồng
Người đóng gópNhà tài trợ Cộng đồng
Nhà tài trợCộng đồng
Cộng đồngThiết lập kết nối
Thiết lập kết nốiCách được đề xuất để thiết lập kết nối là:
Tuy nhiên, một kết nối cũng có thể được thiết lập ngầm bằng cách gọi một truy vấn:
Tùy thuộc vào cách bạn muốn xử lý các lỗi của mình, một trong hai phương thức có thể phù hợp. Bất kỳ loại lỗi kết nối (bắt tay hoặc mạng) được coi là lỗi nghiêm trọng, xem phần xử lý lỗi để biết thêm thông tin. Tùy chọn kết nốiKhi thiết lập kết nối, bạn có thể đặt các tùy chọn sau:
Ngoài việc chuyển các tùy chọn này dưới dạng đối tượng, bạn cũng có thể sử dụng chuỗi URL. Ví dụ:
Lưu ý: Các giá trị truy vấn trước tiên được cố gắng được phân tích cú pháp là JSON và nếu điều đó thất bại là chuỗi rõ ràng. Tùy chọn SSLTùy chọn 22 trong các tùy chọn kết nối có một chuỗi hoặc một đối tượng. Khi được cung cấp một chuỗi, nó sử dụng một trong các cấu hình SSL được xác định trước. Các hồ sơ sau được bao gồm:
Khi kết nối với các máy chủ khác, bạn sẽ cần cung cấp một đối tượng của các tùy chọn, theo định dạng tương tự như TLS.CreateSecureContext. Xin lưu ý các đối số mong đợi một chuỗi của chứng chỉ, không phải tên tệp cho chứng chỉ. Đây là một ví dụ đơn giản:
Bạn cũng có thể kết nối với máy chủ MySQL mà không cần CA thích hợp để tin tưởng. Bạn không nên làm điều này.
Cờ kết nốiNếu, vì bất kỳ lý do gì, bạn muốn thay đổi các cờ kết nối mặc định, bạn có thể sử dụng tùy chọn kết nối 21. Vượt qua một chuỗi với một danh sách các mục được phân tách bằng dấu phẩy để thêm vào các cờ mặc định. Nếu bạn không muốn một lá cờ mặc định được sử dụng, hãy chuẩn bị cờ với dấu trừ. Để thêm một lá cờ không có trong danh sách mặc định, chỉ cần viết tên cờ hoặc tiền tố nó bằng một điểm cộng (trường hợp không nhạy cảm).
Các cờ sau đây có sẵn:
Chấm dứt kết nốiCó hai cách để kết thúc một kết nối. Kết thúc một kết nối một cách duyên dáng được thực hiện bằng cách gọi phương thức 2:
Điều này sẽ đảm bảo tất cả các truy vấn trước đó vẫn còn trước khi gửi gói 57 đến máy chủ MySQL. Nếu một lỗi gây tử vong xảy ra trước gói 57 có thể được gửi, một đối số 59 sẽ được cung cấp cho cuộc gọi lại, nhưng kết nối sẽ bị chấm dứt bất kể điều đó. Một cách khác để kết thúc kết nối là gọi phương thức 60. Điều này sẽ gây ra sự chấm dứt ngay lập tức của ổ cắm cơ bản. Ngoài ra, 60 đảm bảo rằng sẽ không có thêm sự kiện hoặc cuộc gọi lại sẽ được kích hoạt cho kết nối. Không giống như 2 Phương thức 60 không có đối số gọi lại. Kết nối gộpThay vì tạo và quản lý kết nối từng người một, mô-đun này cũng cung cấp kết nối tích hợp kết nối bằng cách sử dụng 64. Đọc thêm về kết nối gộp. Tạo một nhóm và sử dụng trực tiếp:
Đây là một lối tắt cho 65 -> 66 -> 67. Sử dụng 65 rất hữu ích để chia sẻ trạng thái kết nối cho các truy vấn tiếp theo. Điều này là do hai cuộc gọi đến 69 có thể sử dụng hai kết nối khác nhau và chạy song song. Đây là cấu trúc cơ bản: 0 Nếu bạn muốn đóng kết nối và xóa nó khỏi nhóm, hãy sử dụng 70 thay thế. Nhóm sẽ tạo ra một kết nối mới vào lần tới khi cần thiết. Các kết nối được tạo ra một cách lười biếng bởi nhóm. Nếu bạn định cấu hình nhóm để cho phép tối đa 100 kết nối, nhưng chỉ sử dụng 5 lần đồng thời, chỉ có 5 kết nối được thực hiện. Các kết nối cũng được đạp xe theo kiểu vòng tròn, với các kết nối được lấy từ đỉnh hồ bơi và trở về phía dưới. Khi kết nối trước được lấy từ nhóm, một gói ping được gửi đến máy chủ để kiểm tra xem kết nối có tốt không. Tùy chọn hồ bơiCác nhóm chấp nhận tất cả các tùy chọn giống như một kết nối. Khi tạo một kết nối mới, các tùy chọn chỉ được chuyển cho hàm tạo kết nối. Ngoài các nhóm tùy chọn đó chấp nhận một vài tính năng bổ sung:
Sự kiện bể bơicó được, thu đượcBể bơi sẽ phát ra một sự kiện 84 khi kết nối được mua từ nhóm. Điều này được gọi sau khi tất cả các hoạt động có được đã được thực hiện trên kết nối, ngay trước khi kết nối được trao cho cuộc gọi lại của mã thu được. 1 sự liên quanBể bơi sẽ phát ra một sự kiện 85 khi kết nối mới được thực hiện trong nhóm. Nếu bạn cần đặt các biến phiên trên kết nối trước khi được sử dụng, bạn có thể nghe sự kiện 85. 2 enqueueBể bơi sẽ phát ra một sự kiện 87 khi một cuộc gọi lại đã được xếp hàng để chờ đợi một kết nối có sẵn. 3 phóng thíchBể bơi sẽ phát ra một sự kiện 88 khi kết nối được phát hành trở lại hồ bơi. Điều này được gọi sau khi tất cả các hoạt động phát hành đã được thực hiện trên kết nối, vì vậy kết nối sẽ được liệt kê là miễn phí tại thời điểm của sự kiện. 4 Đóng tất cả các kết nối trong một hồ bơiKhi bạn hoàn thành bằng cách sử dụng nhóm, bạn phải kết thúc tất cả các kết nối hoặc vòng lặp sự kiện Node.js sẽ duy trì hoạt động cho đến khi các kết nối được đóng bởi máy chủ MySQL. Điều này thường được thực hiện nếu nhóm được sử dụng trong tập lệnh hoặc khi cố gắng tắt máy chủ một cách duyên dáng. Để kết thúc tất cả các kết nối trong nhóm, hãy sử dụng phương thức 89 trên nhóm: 5 Phương thức 89 có một cuộc gọi lại tùy chọn mà bạn có thể sử dụng để biết khi nào tất cả các kết nối được kết thúc. Khi var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); }); connection.end(); var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); }); connection.end(); var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); }); connection.end(); var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); }); connection.end(); var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); }); connection.end(); var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); }); connection.end(); var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); }); connection.end(); 91. If you use the shortcut method 94, in place of 92 → 96 → 97, wait until it completes. 91 gọi 99 trên mọi kết nối đang hoạt động trong nhóm. Điều này xếp hàng gói 00 trên kết nối và đặt cờ để ngăn chặn 92 tạo các kết nối mới. Tất cả các lệnh / truy vấn đã được tiến hành sẽ hoàn thành, nhưng các lệnh mới sẽ không được thực thi. PoolclusterPoolCluster cung cấp nhiều kết nối máy chủ. (Nhóm & Thử lại & Bộ chọn) 6 Tùy chọn bao gồm nhóm
7 Chuyển đổi người dùng và thay đổi trạng thái kết nốiMySQL cung cấp lệnh thay đổi cho phép bạn thay đổi người dùng hiện tại và các khía cạnh khác của kết nối mà không tắt ổ cắm cơ bản: 8 Các tùy chọn có sẵn cho tính năng này là:
Một tác dụng phụ đôi khi hữu ích của chức năng này là chức năng này cũng đặt lại bất kỳ trạng thái kết nối nào (biến, giao dịch, v.v.). Lỗi gặp phải trong hoạt động này được coi là lỗi kết nối gây tử vong bằng mô -đun này. Máy chủ ngắt kết nốiBạn có thể mất kết nối với máy chủ MySQL do sự cố mạng, máy chủ thời gian bạn ra ngoài, máy chủ được khởi động lại hoặc gặp sự cố. Tất cả các sự kiện này được coi là lỗi gây tử vong và sẽ có 24. Xem phần Xử lý lỗi để biết thêm thông tin. Kết nối lại một kết nối được thực hiện bằng cách thiết lập một kết nối mới. Sau khi bị chấm dứt, một đối tượng kết nối hiện có không thể được kết nối lại bằng thiết kế. Với nhóm, các kết nối bị ngắt kết nối sẽ bị xóa khỏi nhóm giải phóng không gian để kết nối mới được tạo trong cuộc gọi GetConnection tiếp theo. Với PoolCluster, các kết nối bị ngắt kết nối sẽ được tính là lỗi đối với nút liên quan, tăng mã lỗi cho nút đó. Khi có nhiều lỗi 06 trên một nút nhất định, nó sẽ bị xóa khỏi cụm. Khi điều này xảy ra, PoolCluster có thể phát ra lỗi 26 nếu không còn bất kỳ nút phù hợp nào cho mẫu. Cấu hình 12 có thể được đặt để khôi phục các nút ngoại tuyến sau một thời gian chờ nhất định. Thực hiện truy vấnCách cơ bản nhất để thực hiện truy vấn là gọi phương thức 28 trên một đối tượng (như phiên bản 29, 30 hoặc 31). Hình thức đơn giản nhất của .________ 232 là 33, trong đó chuỗi SQL là đối số đầu tiên và thứ hai là một cuộc gọi lại: 9 Mẫu thứ hai 34 xuất hiện khi sử dụng các giá trị giữ chỗ (xem các giá trị truy vấn thoát ra): 0 Mẫu thứ ba 35 xuất hiện khi sử dụng các tùy chọn nâng cao khác nhau trên truy vấn, như thoát khỏi các giá trị truy vấn, tham gia với tên cột chồng chéo, thời gian chờ và loại đúc. 1 Lưu ý rằng sự kết hợp của các biểu mẫu thứ hai và thứ ba có thể được sử dụng trong đó các giá trị giữ chỗ được truyền như một đối số và không phải trong đối tượng tùy chọn. Đối số 36 sẽ ghi đè 36 trong đối tượng tùy chọn. 2 Nếu truy vấn chỉ có một ký tự thay thế duy nhất ( 38) và giá trị không phải là 39, 40 hoặc một mảng, nó có thể được chuyển trực tiếp dưới dạng đối số thứ hai cho 41: 3 Thoát khỏi các giá trị truy vấnTHẬN TRỌNG Các phương thức thoát ra các giá trị chỉ hoạt động khi chế độ SQL NO_Backslash_escapes bị vô hiệu hóa (đây là trạng thái mặc định cho các máy chủ MySQL). These methods of escaping values only works when the NO_BACKSLASH_ESCAPES SQL mode is disabled (which is the default state for MySQL servers). Để tránh các cuộc tấn công tiêm SQL, bạn phải luôn thoát khỏi bất kỳ dữ liệu nào được cung cấp của người dùng trước khi sử dụng dữ liệu bên trong truy vấn SQL. Bạn có thể làm như vậy bằng cách sử dụng các phương thức 42, 43 hoặc 44: 4 Ngoài ra, bạn có thể sử dụng các ký tự 38 làm người giữ chỗ cho các giá trị bạn muốn thoát như thế này: 5 Nhiều người giữ chỗ được ánh xạ tới các giá trị theo cùng thứ tự như được thông qua. Ví dụ: trong truy vấn sau 46 bằng 47, 48 bằng 49, 50 bằng 51 và 52 sẽ là 53: 6 Điều này trông tương tự như các câu lệnh được chuẩn bị trong MySQL, tuy nhiên nó thực sự chỉ sử dụng cùng một phương thức 43 bên trong. THẬN TRỌNG Điều này cũng khác với các tuyên bố đã chuẩn bị ở chỗ tất cả var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'example.org', user : 'bob', password : 'secret' }); connection.connect(function(err) { if (err) { console.error('error connecting: ' + err.stack); return; } console.log('connected as id ' + connection.threadId); }); 38 are replaced, even those contained in comments and strings. Các loại giá trị khác nhau được thoát khác nhau, đây là cách:
Việc trốn thoát này cho phép bạn làm những việc gọn gàng như thế này: 7 Và phương thức 64 cho phép bạn hình thành các truy vấn phức tạp với các chức năng: 8 Để tạo các đối tượng bằng phương pháp 64, phương thức 74 có thể được sử dụng. Điều này tạo ra một đối tượng sẽ không bị hỏng khi sử dụng trong trình giữ chỗ 38, hữu ích cho việc sử dụng các hàm làm giá trị động: THẬN TRỌNG Chuỗi được cung cấp cho var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'example.org', user : 'bob', password : 'secret' }); connection.connect(function(err) { if (err) { console.error('error connecting: ' + err.stack); return; } console.log('connected as id ' + connection.threadId); }); 74 will skip all escaping functions when used, so be careful when passing in unvalidated input. 9 Nếu bạn cảm thấy cần phải thoát khỏi các truy vấn một mình, bạn cũng có thể sử dụng chức năng thoát trực tiếp: 0 Thoát khỏi số nhận dạng truy vấnNếu bạn không thể tin tưởng một định danh SQL (cơ sở dữ liệu / bảng / cột / cột) vì nó được cung cấp bởi người dùng, bạn nên thoát nó bằng 77, 78 hoặc 79 như thế này: 1 Nó cũng hỗ trợ thêm định danh đủ điều kiện. Nó sẽ thoát khỏi cả hai phần. 2 Nếu bạn không muốn coi 80 là định danh đủ điều kiện, bạn có thể đặt đối số thứ hai thành 3 để giữ chuỗi làm định danh theo nghĩa đen: 3 Ngoài ra, bạn có thể sử dụng các ký tự 82 làm người giữ chỗ cho các định danh mà bạn muốn thoát như thế này: 4 Xin lưu ý rằng chuỗi ký tự cuối cùng này là thử nghiệm và cú pháp có thể thay đổi Khi bạn chuyển một đối tượng đến 83 hoặc 28, 85 được sử dụng để tránh tiêm SQL trong các phím đối tượng. Chuẩn bị truy vấnBạn có thể sử dụng mysql.format để chuẩn bị một truy vấn với nhiều điểm chèn, sử dụng việc thoát thích hợp cho ID và giá trị. Một ví dụ đơn giản về điều này sau: 5 Theo sau đó, sau đó bạn có một truy vấn hợp lệ, thoát ra mà sau đó bạn có thể gửi đến cơ sở dữ liệu một cách an toàn. Điều này rất hữu ích nếu bạn đang tìm cách chuẩn bị truy vấn trước khi thực sự gửi nó đến cơ sở dữ liệu. Vì mysql.format được tiếp xúc với sqlString.format, bạn cũng có tùy chọn (nhưng không bắt buộc) để truyền trong StringifyObject và múi giờ, cho phép bạn cung cấp một phương tiện tùy chỉnh để biến các đối tượng thành chuỗi, cũng như một loại thời gian cụ thể/thời gian-đặc trưng cho vị trí/thời gian- ngày nhận thức. Định dạng tùy chỉnhNếu bạn thích có một loại định dạng thoát truy vấn khác, có tùy chọn cấu hình kết nối bạn có thể sử dụng để xác định hàm định dạng tùy chỉnh. Bạn có thể truy cập đối tượng kết nối nếu bạn muốn sử dụng 83 hoặc bất kỳ chức năng kết nối nào khác. Đây là một ví dụ về cách thực hiện định dạng khác: 6 Nhận id của một hàng chènNếu bạn đang chèn một hàng vào một bảng có khóa chính tăng tự động, bạn có thể truy xuất ID chèn như thế này: 7 Khi xử lý các số lớn (trên giới hạn chính xác số JavaScript), bạn nên xem xét kích hoạt tùy chọn 5 để có thể đọc ID chèn dưới dạng chuỗi, nếu không nó sẽ gây ra lỗi. Tùy chọn này cũng được yêu cầu khi tìm nạp các số lớn từ cơ sở dữ liệu, nếu không bạn sẽ nhận được các giá trị được làm tròn đến hàng trăm hoặc hàng ngàn do giới hạn chính xác. Nhận số lượng hàng bị ảnh hưởngBạn có thể nhận được số lượng hàng bị ảnh hưởng từ một câu lệnh chèn, cập nhật hoặc xóa. 8 Nhận số lượng hàng thay đổiBạn có thể nhận được số lượng hàng thay đổi từ một câu lệnh cập nhật. "Thay đổi" khác với "bị ảnh hưởng" ở chỗ nó không tính các hàng được cập nhật mà giá trị không thay đổi. 9 Nhận ID kết nốiBạn có thể nhận ID kết nối MySQL ("ID luồng") của một kết nối đã cho bằng thuộc tính 88. 0 Thực hiện các truy vấn song songGiao thức MySQL là tuần tự, điều này có nghĩa là bạn cần nhiều kết nối để thực hiện các truy vấn song song. Bạn có thể sử dụng một nhóm để quản lý các kết nối, một cách tiếp cận đơn giản là tạo một kết nối cho mỗi yêu cầu HTTP đến. Truyền phát các hàng truy vấnĐôi khi bạn có thể muốn chọn một lượng lớn hàng và xử lý từng hàng khi chúng được nhận. Điều này có thể được thực hiện như thế này: 1 Xin lưu ý một vài điều về ví dụ trên:
Ngoài ra, bạn có thể quan tâm để biết rằng hiện tại không thể truyền phát các cột hàng riêng lẻ, chúng sẽ luôn được đệm hoàn toàn. Nếu bạn có một trường hợp sử dụng tốt để phát trực tuyến các lĩnh vực lớn đến và từ MySQL, tôi rất muốn có được suy nghĩ và đóng góp của bạn về điều này. Kết quả đường ống với các luồngĐối tượng truy vấn cung cấp một phương thức tiện lợi 97 kết thúc các sự kiện truy vấn thành một đối tượng luồng có thể đọc được. Luồng này có thể dễ dàng được đường ống xuống và cung cấp tạm dừng/sơ yếu lý lịch tự động, dựa trên tắc nghẽn xuôi dòng và 98 tùy chọn. Tham số 99 của luồng được đặt thành 3 và không thể thay đổi (nếu bạn cần một luồng byte, bạn sẽ cần sử dụng luồng biến đổi, như ObjStream chẳng hạn). Ví dụ: truy vấn đường ống dẫn đến một luồng khác (với bộ đệm tối đa là 5 đối tượng) chỉ đơn giản là: 2 Nhiều truy vấn câu lệnhHỗ trợ cho nhiều tuyên bố bị vô hiệu hóa vì lý do bảo mật (nó cho phép các cuộc tấn công tiêm SQL nếu các giá trị không được thoát đúng). Để sử dụng tính năng này, bạn phải bật nó cho kết nối của mình: 3 Sau khi được bật, bạn có thể thực thi nhiều truy vấn câu lệnh như bất kỳ truy vấn nào khác: 4 Ngoài ra, bạn cũng có thể truyền phát kết quả của nhiều truy vấn câu lệnh: 5 Nếu một trong các câu lệnh trong truy vấn của bạn gây ra lỗi, đối tượng lỗi kết quả chứa thuộc tính 01 cho bạn biết câu lệnh nào gây ra nó. MySQL cũng sẽ ngừng thực hiện bất kỳ câu lệnh còn lại khi xảy ra lỗi. Xin lưu ý rằng giao diện để truyền phát nhiều truy vấn câu lệnh là thử nghiệm và tôi mong muốn phản hồi về nó. Thủ tục lưu trữBạn có thể gọi các quy trình được lưu trữ từ các truy vấn của bạn như với bất kỳ trình điều khiển MySQL nào khác. Nếu quy trình được lưu trữ tạo ra một số bộ kết quả, chúng sẽ tiếp xúc với bạn giống như kết quả cho nhiều truy vấn câu lệnh. Tham gia với tên cột chồng chéoKhi thực hiện tham gia, bạn có khả năng nhận được các bộ kết quả với tên cột chồng chéo. Theo mặc định, Node-MysQL sẽ ghi đè tên cột va chạm theo thứ tự các cột được nhận từ MySQL, khiến một số giá trị nhận được không khả dụng. Tuy nhiên, bạn cũng có thể chỉ định rằng bạn muốn các cột của mình được lồng bên dưới tên bảng như thế này: 6 Hoặc sử dụng một dải phân cách chuỗi để kết quả của bạn được hợp nhất. 7 Giao dịchHỗ trợ giao dịch đơn giản có sẵn ở cấp độ kết nối: 8 Xin lưu ý rằng BEGINTransaction (), cam kết () và rollback () chỉ đơn giản là các hàm thuận tiện thực hiện các lệnh bắt đầu, cam kết và rollback tương ứng. Điều quan trọng là phải hiểu rằng nhiều lệnh trong mysql có thể gây ra cam kết ngầm, như được mô tả trong tài liệu MySQL PingMột gói ping có thể được gửi qua kết nối bằng phương thức 02. Phương thức này sẽ gửi một gói ping đến máy chủ và khi máy chủ phản hồi, cuộc gọi lại sẽ bắn. Nếu xảy ra lỗi, cuộc gọi lại sẽ bắn với một đối số lỗi. 9 Thời gian chờMỗi hoạt động đều có một tùy chọn thời gian chờ không hoạt động tùy chọn. Điều này cho phép bạn chỉ định thời gian chờ phù hợp cho các hoạt động. Điều quan trọng cần lưu ý là các thời gian chờ này không phải là một phần của giao thức MYSQL và thay vào đó là các hoạt động thời gian chờ thông qua máy khách. Điều này có nghĩa là khi đạt được thời gian chờ, kết nối nó xảy ra sẽ bị phá hủy và không có hoạt động nào có thể được thực hiện. 0 Xử lý lỗiMô -đun này đi kèm với một cách tiếp cận nhất quán để xử lý lỗi mà bạn nên xem xét cẩn thận để viết các ứng dụng vững chắc. Hầu hết các lỗi được tạo bởi mô -đun này là các trường hợp của đối tượng lỗi JavaScript. Ngoài ra, chúng thường đi kèm với hai thuộc tính bổ sung:
Lỗi nghiêm trọng được truyền đến tất cả các cuộc gọi lại đang chờ xử lý. Trong ví dụ dưới đây, một lỗi nghiêm trọng được kích hoạt bằng cách cố gắng kết nối với một cổng không hợp lệ. Do đó, đối tượng lỗi được truyền đến cả hai cuộc gọi lại đang chờ xử lý: 1 Tuy nhiên, các lỗi thông thường chỉ được giao cho cuộc gọi lại mà chúng thuộc về. Vì vậy, trong ví dụ dưới đây, chỉ có cuộc gọi lại đầu tiên nhận được lỗi, truy vấn thứ hai hoạt động như mong đợi: 2 Cuối cùng nhưng không kém phần quan trọng: nếu xảy ra lỗi nghiêm trọng và không có cuộc gọi lại đang chờ xử lý hoặc xảy ra lỗi thông thường không có cuộc gọi lại thuộc về nó, lỗi được phát ra dưới dạng sự kiện 12 trên đối tượng kết nối. Điều này được thể hiện trong ví dụ dưới đây: 3 Lưu ý: 12 Sự kiện là đặc biệt trong nút. Nếu chúng xảy ra mà không có người nghe đính kèm, một dấu vết ngăn xếp được in và quá trình của bạn bị giết. TL; DR: Mô -đun này không muốn bạn đối phó với những thất bại im lặng. Bạn phải luôn luôn cung cấp các cuộc gọi lại cho các cuộc gọi phương thức của bạn. Nếu bạn muốn bỏ qua lời khuyên này và đàn áp các lỗi chưa được xử lý, bạn có thể làm điều này: This module does not want you to deal with silent failures. You should always provide callbacks to your method calls. If you want to ignore this advice and suppress unhandled errors, you can do this: 4 An toàn ngoại lệMô -đun này là ngoại lệ an toàn. Điều đó có nghĩa là bạn có thể tiếp tục sử dụng nó, ngay cả khi một trong các chức năng gọi lại của bạn có lỗi mà bạn đang bắt được bằng cách sử dụng 'UncaughtException' hoặc một tên miền. Loại đúcĐể thuận tiện cho bạn, trình điều khiển này sẽ chuyển các loại MySQL thành các loại JavaScript gốc theo mặc định. Các ánh xạ sau đây tồn tại: Con số
Ngày
Đệm
Sợi dâyLưu ý Văn bản trong bộ ký tự nhị phân được trả về dưới dạng var mysql = require('mysql'); var connection = mysql.createConnection(...); connection.query('SELECT 1', function (error, results, fields) { if (error) throw error; }); 14, rather than a string.
Không được khuyến nghị (và có thể biến mất / thay đổi trong tương lai) để vô hiệu hóa loại đúc, nhưng hiện tại bạn có thể làm như vậy trên kết nối: 5 Hoặc ở cấp độ truy vấn: 6 Loại đúc kiểu tùy chỉnhBạn cũng có thể vượt qua một chức năng và xử lý loại tự đúc. Bạn đang cung cấp một số thông tin cột như cơ sở dữ liệu, bảng và tên và cả loại và độ dài. Nếu bạn chỉ muốn áp dụng một loại đúc kiểu tùy chỉnh cho một loại cụ thể, bạn có thể làm điều đó và sau đó dự phòng về mặc định. Hàm được cung cấp hai đối số 15 và 16 và dự kiến sẽ trả về giá trị cho trường đã cho bằng cách gọi các hàm của trình phân tích cú pháp thông qua đối tượng 15. Đối số 15 là đối tượng 19 và chứa dữ liệu về trường cần được phân tích cú pháp. Sau đây là một số thuộc tính trên đối tượng 19:
Đối số 16 là một 27, khi được gọi, sẽ trả về chuyển đổi loại mặc định cho trường đã cho. Khi nhận được dữ liệu trường, các phương thức trợ giúp sau đây có mặt trên đối tượng 15:
Giao thức MySQL là một giao thức dựa trên văn bản. Điều này có nghĩa là trên dây, tất cả các loại trường được biểu diễn dưới dạng chuỗi, đó là lý do tại sao chỉ có các hàm giống như chuỗi có sẵn trên đối tượng 15. Dựa trên thông tin loại (như 34), loại diễn viên nên chuyển đổi trường chuỗi thành loại JavaScript khác (như 35). Dưới đây là một ví dụ về việc chuyển đổi 36 thành Boolean: 7 CẢNH BÁO: Bạn phải gọi trình phân tích cú pháp bằng một trong ba chức năng trường này trong cuộc gọi lại kiểu chữ tùy chỉnh của bạn. Họ chỉ có thể được gọi một lần. Các vấn đề về gỡ lỗi và báo cáoNếu bạn đang gặp vấn đề, một điều có thể giúp là cho phép chế độ 08 cho kết nối: 8 Điều này sẽ in tất cả các gói đến và đi trên stdout. Bạn cũng có thể hạn chế gỡ lỗi cho các loại gói bằng cách chuyển một mảng các loại để gỡ lỗi: 9 Để hạn chế gỡ lỗi cho các gói truy vấn và dữ liệu. Nếu điều đó không giúp đỡ, hãy thoải mái mở một vấn đề GitHub. Một vấn đề github tốt sẽ có:
Vấn đề an ninhCác vấn đề bảo mật không nên được báo cáo đầu tiên thông qua GitHub hoặc một diễn đàn công cộng khác, nhưng được giữ riêng để các cộng tác viên đánh giá báo cáo và (a) đưa ra một sửa chữa và lên kế hoạch cho ngày phát hành hoặc (b) khẳng định rằng đó không phải là một Vấn đề (trong trường hợp đó nó có thể được đăng trong một diễn đàn công cộng, như vấn đề GitHub). Diễn đàn riêng tư chính là email, bằng cách gửi email cho tác giả của mô -đun hoặc mở vấn đề GitHub chỉ cần yêu cầu ai là vấn đề bảo mật nên được giải quyết mà không tiết lộ vấn đề hoặc loại vấn đề. Một báo cáo lý tưởng sẽ bao gồm một dấu hiệu rõ ràng về vấn đề bảo mật là gì và nó sẽ được khai thác như thế nào, lý tưởng với một bằng chứng về khái niệm đi kèm ("POC") để các cộng tác viên làm việc chống lại và xác nhận các bản sửa lỗi thông thường chống lại. Đóng gópDự án này hoan nghênh những đóng góp từ cộng đồng. Đóng góp được chấp nhận bằng cách sử dụng các yêu cầu kéo GitHub. Nếu bạn không quen với việc thực hiện các yêu cầu kéo GitHub, vui lòng tham khảo tài liệu GitHub "Tạo yêu cầu kéo". Đối với một yêu cầu kéo tốt, chúng tôi yêu cầu bạn cung cấp những điều sau:
Chạy thử nghiệmBộ thử nghiệm được chia thành hai phần: kiểm tra đơn vị và kiểm tra tích hợp. Các thử nghiệm đơn vị chạy trên bất kỳ máy nào trong khi các thử nghiệm tích hợp yêu cầu thiết lập máy chủ MySQL được thiết lập. Chạy bài kiểm tra đơn vịChạy kiểm tra tích hợpĐặt các biến môi trường 42, 43, 44, 45 và 46. 47 cũng có thể được sử dụng thay cho 43 và 44 để kết nối qua ổ cắm UNIX. Sau đó chạy 50. Ví dụ: nếu bạn có cài đặt MySQL chạy trên localhost: 3306 và không có mật khẩu được đặt cho người dùng 51, hãy chạy: 0 Làm
Node.js có tốt với mysql không?Nói chung, nút.JS được kết hợp với MongoDB và các cơ sở dữ liệu NoQuery khác, nhưng Node.js cũng hoạt động tốt với các cơ sở dữ liệu quan hệ như MySQL.Nếu bạn muốn viết một microservice mới với nút.Node. js performs well with relational databases like MySQL, too. If you want to write a new microservice with Node.
Node.js có tốt với SQL không?Node.js thường hỗ trợ tất cả các loại cơ sở dữ liệu, bất kể chúng là SQL hay NoQuery.Tuy nhiên, việc lựa chọn cơ sở dữ liệu phải được thực hiện dựa trên sự phức tạp và mục đích của ứng dụng của bạn.Trong bài viết này, chúng tôi sẽ xem xét kỹ hơn về cơ sở dữ liệu SQL và NoQuery, cũng như các ví dụ thực tế của họ. js typically supports all database types, regardless of whether they're SQL or NoSQL. Nevertheless, the choice of a database must be made based on the complexity and purposes of your application. In this article, we will take a closer look at SQL and NoSQL databases, as well as at their practical examples.
Cái nào tốt hơn với Node.js MySQL hoặc MongoDB?Nếu bạn có dữ liệu quan hệ MySQL là một lựa chọn vượt trội so với MongoDB.Đối với những thứ đơn giản MongoDB là tốt, nhưng khi cố gắng gắn kết nhiều dữ liệu quan hệ với nhau MongoDB là một cơn ác mộng.. For simple stuff MongoDB is fine, but when trying to tie a lot of relational data together MongoDB is a nightmare.
Node.js có tốt cho cơ sở dữ liệu quan hệ không?Node.js hỗ trợ tất cả các loại cơ sở dữ liệu, bao gồm cơ sở dữ liệu quan hệ và NoQuery.Tuy nhiên, nút.Cơ sở dữ liệu JS NoQuery là phù hợp nhất cho hầu hết các ứng dụng và trường hợp sử dụng trên toàn công ty. js supports all types of databases, including relational and NoSQL databases. However, Node. js NoSQL databases are the best match for most applications and company-wide use-cases. |