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.