Anda sebenarnya dapat mengatur bufferMaxEntries
opsi ( didokumentasikan di bawah Db
tetapi tidak digunakan lagi untuk penggunaan objek tersebut, gunakan di "tingkat atas seperti yang ditunjukkan sebagai gantinya" ) pada koneksi, yang pada dasarnya menghentikan permintaan "mengantre" pada driver saat tidak ada koneksi yang benar-benar ada.
Sebagai contoh minimal:
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);
}
})();
routes.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;
Jadi saya sebenarnya menunggu koneksi database untuk setidaknya hadir pada "start up" di sini, tetapi sebenarnya hanya sebagai contoh karena saya ingin memasukkan beberapa data untuk benar-benar diambil. Tidak wajib, tapi konsep dasarnya adalah menunggu Promise
untuk menyelesaikan:
await db.then(() => 1);
Agak sepele, dan tidak terlalu diperlukan untuk kode Anda yang sebenarnya. Tapi saya tetap berpikir itu adalah praktik yang baik.
Tes sebenarnya dilakukan dengan menghentikan mongod
atau sebaliknya membuat server tidak dapat dijangkau dan kemudian mengeluarkan permintaan.
Karena kita menyetel opsi koneksi ke { bufferMaxEntries: 0 }
ini berarti segera saat Anda mencoba mengeluarkan perintah ke database, kegagalan akan dikembalikan jika tidak ada koneksi yang sebenarnya.
Tentu saja ketika database tersedia kembali, Anda tidak akan mendapatkan kesalahan dan instruksi akan berjalan normal.
Tanpa opsi, defaultnya adalah "mengantrekan" operasi sampai koneksi diselesaikan dan kemudian "buffer" pada dasarnya "dimainkan".
Anda dapat mensimulasikan ini (seperti yang saya lakukan) dengan "menghentikan" mongod
daemon dan mengeluarkan permintaan. Kemudian "memulai" daemon dan mengeluarkan permintaan. Seharusnya hanya mengembalikan respons kesalahan yang tertangkap.