MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Hành vi của request trong node.js

Có 3 điểm chính cần hiểu ở đây và sau đó tôi sẽ giải thích chúng một cách chi tiết.

  1. module.exports là một đối tượng và các đối tượng được chuyển bằng bản sao tham chiếu trong JavaScript.
  2. request là đồng bộ chức năng.
  3. client.connect là không đồng bộ chức năng.

Như bạn đã đề xuất, đó là một điều thời gian. node.js không thể biết rằng module.exports sẽ thay đổi sau này. Đó không phải là vấn đề. Làm sao nó biết được điều đó?

Khi require chạy, nó tìm một tệp đáp ứng các yêu cầu của nó dựa trên đường dẫn bạn đã nhập, đọc và thực thi nó, đồng thời lưu vào bộ nhớ đệm module.exports để các mô-đun khác có thể require cùng một mô-đun và không phải khởi tạo lại nó (điều này sẽ làm rối loạn phạm vi biến, v.v.)

client.connect là một lệnh gọi hàm không đồng bộ, vì vậy sau khi bạn thực thi nó, mô-đun sẽ kết thúc quá trình thực thi và require lệnh gọi lưu trữ một bản sao của tham chiếu module.exports và trả lại cho users.js. Sau đó, bạn đặt module.exports = db , nhưng quá trễ rồi. Bạn đang thay thế tham chiếu module.exports bằng một tham chiếu tới db, nhưng việc xuất mô-đun trong nút require bộ nhớ cache đang trỏ đến đối tượng cũ.

Tốt hơn nên định nghĩa module.exports là một hàm sẽ nhận được kết nối và sau đó chuyển nó đến một hàm gọi lại như sau:

var mongodb = require("mongodb");
var client = mongodb.MongoClient;

module.exports = function (callback) {
    client.connect('mongodb://host:port/dbname', { auto_reconnect: true },
          function(err, db) {
             if (err) {
                console.log(err);
                callback(err);
             } else {
                // export db as member of exports
                callback(err, db);
             }
          }
    )
};

Cảnh báo:mặc dù nó nằm ngoài phạm vi của câu trả lời này, hãy hết sức cẩn thận với đoạn mã trên để đảm bảo bạn đóng / trả lại các kết nối một cách thích hợp, nếu không, bạn sẽ làm rò rỉ kết nối.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb nâng cấp tài liệu nhúng

  2. nhóm theo tháng và năm bằng cách sử dụng mongoose.js

  3. Mô hình hóa dữ liệu MongoDB:bất kỳ hạn chế nào khi sử dụng nhiều cơ sở dữ liệu?

  4. Duy trì thứ tự các yêu cầu http trong vòng lặp for trong javascript

  5. Truy vấn ngày hoạt động với _id nhưng không hoạt động với giá trị Ngày - MongoDB