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?

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

Nút js truy vấn đồng bộ mysql

Tìm kiếm tuỳ chỉnh

Tìm kiếm toàn bộ trang web

Nút js truy vấn đồng bộ mysql

Tìm kiếm tuỳ chỉnh

bài viết liên quan

  • Tham số chức năng Javascript với nhiều loại đối số khác nhau
  • Bản đồ Javascript so với đối tượng
  • Sao chép một số thuộc tính từ một đối tượng trong javascript
  • Chuyển đổi số cơ sở Javascript
  • Thiết lập phaser để phát triển trò chơi html5
  • Di chuyển phần tử html lên và xuống khi bạn cuộn trang
  • Gửi biểu mẫu html mà không cần tải lại trang
  • xác thực mẫu trong nút. js
  • Các trường hợp sử dụng JSON
  • tài liệu xml so với json
  • Hơn


  • nút. js viết luồng kiểm soát giới hạn song song không đồng bộ của riêng bạn
  • Các trường hợp sử dụng JSON

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/2020

Bởi Siavash Ashkiani

Sự miêu tả

Mở rộng gói mysql tới
1- Quảng cáo đối tượng kết nối cơ sở dữ liệu.
2- Cung cấp phương thức thực hiện truy vấn đồng bộ.

Yêu cầu thiết lập/cài đặt

  • Chạy lệnh. npm install mysql-sync-query
  • Khai báo một biến/hằng để yêu cầu gói cài đặt e. g
let db = require("mysql-sync-query");
  • Biến được xác định trong bước cuối cùng đại diện cho một lớp có hàm tạo lấy tên cơ sở dữ liệu hiện có. e. g
let databaseObject = new db("employees_db");

phương pháp

kết nốiLocal

Kết nối Node với máy chủ MySQL cục bộ hiện có. Thông số

  • máy chủ - tên máy chủ e. g. máy chủ cục bộ
  • port - cổng kết nối cơ sở dữ liệu e. g. 3306
  • người dùng - tên người dùng đăng nhập cơ sở dữ liệu
  • mật khẩu - mật khẩu đăng nhập cơ sở dữ liệu

kết nối từ xa

Kết nối Node với máy chủ MySQL từ xa hiện có. Thông số

  • URL - e. g. process.env.JAWSDB_URL

thực hiện kiểm tra

Thực hiện truy vấn đầu vào và trả về các hàng bị ảnh hưởng
Tham số.

  • textQuery - chuỗi truy vấn SQL e. g. "SELECT * FROM table_name"
    Trả về.
  • một đối tượng JSON chứa các bản ghi cơ sở dữ liệu

ngắt kết nối

Chấm dứt kết nối. ​

Ví dụ

const db = require("mysql-sync-query");  
const dbObj = new db("employees_db");  

async function start() {  
    dbObj.connectLocal("localHost", 3306, "user", "password");  
    try {  
        let res = await dbObj.executeQuery("SELECT * FROM employee");  
        console.log(res);  
    }  
    catch (err) {  
        console.log(err);  
    }  
    finally {  
        dbObj.disconnect();  
    }  
}  
  
start();  

lỗi đã biết

Khô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ụng

Nút. js, mysql

Nguyên tắc đóng góp

Liê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.