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

Mongo db with Monk:bắt lỗi và xử lý nếu db bị lỗi

Bạn thực sự có thể đặt bufferMaxEntries (được ghi lại trong Db nhưng không được dùng nữa đối với việc sử dụng đối tượng đó, hãy sử dụng ở "cấp cao nhất như đã trình bày thay thế") trên kết nối, về cơ bản sẽ dừng các yêu cầu "xếp hàng" trên trình điều khiển khi không có kết nối thực sự.

Như một ví dụ tối thiểu:

index.js

const express = require('express'),
      morgan = require('morgan'),
      db = require('monk')('localhost/test',{ bufferMaxEntries: 0 }),
      app = express();

const routes = require('./routes');

app.use(morgan('combined'));

app.use((req,res,next) => {
  req.db = db;
  next();
});

app.use('/', routes);

(async function() {

  try {

    await db.then(() => 1);

    let collection = db.get('test');
    await collection.remove({});

    await collection.insert(Array(5).fill(1).map((e,i) => ({ a: i+1 })));
    console.log('inserted test data');

    await app.listen(3000,'0.0.0.0');
    console.log('App waiting');

  } catch(e) {
    console.error(e);
  }

})();

route.js

var router = require('express').Router();

router.get('/', async (req,res) => {
  try {
    let db = req.db,
        collection = db.get('test');

    let response = await collection.find();
    res.json(response);
  } catch(e) {
    res.status(500).json(e);
  }
});

module.exports = router;

Vì vậy, tôi thực sự đang chờ kết nối cơ sở dữ liệu ít nhất là có mặt khi "khởi động" ở đây, nhưng thực sự chỉ là ví dụ vì tôi muốn chèn một số dữ liệu để thực sự truy xuất. Nó không bắt buộc, nhưng khái niệm cơ bản là đợi Promise để giải quyết:

await db.then(() => 1);

Loại tầm thường và không thực sự cần thiết cho mã thực của bạn. Nhưng tôi vẫn nghĩ đó là cách làm tốt.

Kiểm tra thực sự được thực hiện bằng cách dừng mongod hoặc làm cho máy chủ không thể truy cập được và sau đó đưa ra yêu cầu.

Vì chúng tôi đặt các tùy chọn kết nối thành { bufferMaxEntries: 0 } điều này có nghĩa là ngay lập tức khi bạn cố gắng đưa ra một lệnh cho cơ sở dữ liệu, lỗi sẽ được trả về nếu không có kết nối thực sự nào.

Tất nhiên khi cơ sở dữ liệu khả dụng trở lại, bạn sẽ không gặp lỗi và các hướng dẫn sẽ diễn ra bình thường.

Nếu không có tùy chọn, mặc định là "xếp hàng" các hoạt động cho đến khi kết nối được giải quyết và khi đó "bộ đệm" về cơ bản được "phát".

Bạn có thể mô phỏng điều này (như tôi đã làm) bằng cách "dừng" mongod daemon và yêu cầu phát hành. Sau đó "khởi động" daemon và đưa ra các yêu cầu. Nó sẽ chỉ trả về phản hồi lỗi đã bắt được.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để tạo một kết xuất MongoDB cho cơ sở dữ liệu của tôi?

  2. Cách viết nhiều nhóm theo trường id trong trình điều khiển java Mongodb

  3. Làm thế nào để bạn truy vấn cho không phải là null trong Mongo?

  4. Atomic nếu không tồn tại thì hãy chèn vào trình điều khiển Mongodb .Net

  5. Tại sao máy chủ cấu hình MongoDB chỉ phải là một hoặc ba?