Nút js truy vấn đồng bộ mysql
Tôi có một nút. js/Express ứng dụng truy vấn MySQL db trong route và hiển thị kết quả cho người dùng. Vấn đề của tôi là làm cách nào để chạy truy vấn và chặn cho đến khi cả hai truy vấn được thực hiện trước khi chuyển hướng người dùng đến trang họ yêu cầu? Show
Trong ví dụ của tôi, tôi có 2 truy vấn cần hoàn thành trước khi kết xuất trang. Tôi có thể chạy đồng bộ các truy vấn nếu tôi lồng truy vấn 2 bên trong lệnh gọi lại 'kết quả' của truy vấn 1. Tuy nhiên, điều này sẽ trở nên rất phức tạp khi số lượng truy vấn tăng lên Làm cách nào để tôi chạy đồng bộ nhiều truy vấn cơ sở dữ liệu (trong trường hợp này là 2) mà không lồng truy vấn tiếp theo trong hàm gọi lại 'kết quả' của truy vấn trước? Tôi đã xem 'Điều khiển luồng / Tính năng không đồng bộ' trong các mô-đun Node và đã thử dùng flow-js nhưng tôi không thể làm cho nó hoạt động với các truy vấn không đồng bộ Dưới đây là 2 truy vấn mà tôi đang cố gắng thực hiện từ tuyến đường '/home'. Các chuyên gia Node có thể giải thích cách 'đúng' để thực hiện việc này không Nút. js là I/O không đồng bộ mà các quy trình khác có thể bắt đầu và không phải đợi một số quy trình đầu vào/đầu ra đang chạy lâu như đọc và ghi từ tệp hoặc cơ sở dữ liệu. Ví dụ: bạn đang chạy năm truy vấn trong vòng lặp for, kết quả của mỗi vòng lặp sẽ được thêm vào một mảng. Ngay sau vòng lặp for, bạn đang gọi hàm gọi lại để lấy tất cả kết quả, nhưng rất có thể bạn sẽ nhận được một mảng trống vì dòng sau vòng lặp for được thực thi trước các dòng trong vòng lặp for. Đoạn mã dưới đây trình bày cách đảm bảo tất cả các truy vấn được xử lý trước khi thực hiện chức năng gọi lại. Nó khai báo một biến đếm đang chờ xử lý và đặt nó thành số lượng truy vấn sẽ được chạy. Sau khi truy vấn được thực hiện thành công, hãy giảm độ chờ xử lý xuống 1, gọi hàm gọi lại nếu khi độ chờ xử lý bằng 0 var mysql = require('mysql'); var pool = mysql.createPool({ host : 'localhost', user : 'root', password: '', database: 'test' }); function getStudents(ids, cb) { var students = []; var pending = ids.length; for(var i in ids) { pool.query('SELECT * FROM students WHERE id = ?', [ ids[i] ], function(err, stu){ students.push(stu); if( 0 === --pending ) { cb(students); //callback if all queries are processed } }); } } var ids = [1,2,3,4,5]; getStudents(ids, function(students){ console.log(students); }); Bảng được sử dụng trong phần trình diễn ở trên CREATE database `test`; CREATE TABLE `students` ( `id` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL, `grade` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `students` (`id`, `name`, `grade`) VALUES (1,'ken',90), (2,'jim',90), (3,'kay',57), (4,'jerry',57), (5,'wen',66); Tìm kiếm trong Codexpedia
Tìm kiếm tuỳ chỉnh Tìm kiếm toàn bộ trang web
Tìm kiếm tuỳ chỉnh bài viết liên quan
Trả về một mảng đối tượng từ truy vấn SQL. Truy vấn có thể tùy chọn chứa ?s để được thay thế bằng các giá trị thoát khỏi các giá trị phải là một mảng sự liên quan. cuộc gọi (tên, đối số)Gọi một thủ tục cơ sở dữ liệu. Nếu nó chỉ trả về một bộ giá trị, thì bộ giá trị đó được trả về dưới dạng một mảng đối tượng. Nếu nó trả về nhiều bộ giá trị thì chúng được trả về dưới dạng một mảng truy vấn đồng bộ hóa mysql 17/02/2020Bởi Siavash Ashkiani Sự miêu tảMở rộng gói mysql tới Yêu cầu thiết lập/cài đặt
phương phápkết nốiLocalKết nối Node với máy chủ MySQL cục bộ hiện có. Thông số
kết nối từ xaKết nối Node với máy chủ MySQL từ xa hiện có. Thông số
thực hiện kiểm traThực hiện truy vấn đầu vào và trả về các hàng bị ảnh hưởng
ngắt kết nốiChấm dứt kết nối. Ví dụ
lỗi đã biếtKhông có - tại thời điểm này Hỗ trợ và chi tiết liên lạc Vui lòng gửi email cho chúng tôi nếu có thêm câu hỏi tại ashkiani@yahoo. com Công nghệ được sử dụngNút. js, mysql Nguyên tắc đóng gópLiên kết trực tiếp đến gói. https. //www. npmjs. com/gói/mysql-sync-query Giấy phép Phần mềm này được cấp phép theo giấy phép MIT NodeJS có hỗ trợ đồng bộ không?NodeJS là môi trường thời gian chạy JavaScript hướng sự kiện không đồng bộ được thiết kế để xây dựng các ứng dụng mạng có thể mở rộng. Không đồng bộ ở đây đề cập đến tất cả các chức năng trong JavaScript được xử lý ở chế độ nền mà không chặn bất kỳ yêu cầu nào khác.
Truy vấn MySQL có phải là không đồng bộ không?Bất kỳ máy khách MySQL nào hỗ trợ Giao thức X đều có thể cung cấp khả năng thực thi không đồng bộ , bằng cách sử dụng lệnh gọi lại, Lời hứa hoặc bằng cách chờ đợi một cách rõ ràng một kết quả cụ thể tại thời điểm thực tế .
Sử dụng MySQL với NodeJS có tốt không?js được kết hợp với MongoDB và các cơ sở dữ liệu NoSQL 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 Node. js cho cơ sở dữ liệu hiện có, rất có thể bạn sẽ sử dụng MySQL, một trong những cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới.
NodeJS có cho phép giao tiếp với MySQL không?Khi bạn đã thiết lập và chạy MySQL 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 Nút. js . Để truy cập cơ sở dữ liệu MySQL bằng Node. js, bạn cần có trình điều khiển MySQL. |