実際にbufferMaxEntries
を設定できます オプション( Db
に記載されています
ただし、そのオブジェクトの使用は非推奨であり、接続で「代わりにデモンストレーションされたトップレベル」で使用します。これにより、実際に接続が存在しない場合に、ドライバーでの「キューイング」要求が本質的に停止します。
最小限の例として:
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);
}
})();
routers.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;
したがって、実際には、データベース接続が少なくともここでの「起動」時に存在するのを待っていますが、実際には、実際に取得するデータを挿入したいので、実際には例にすぎません。必須ではありませんが、基本的な概念はPromise
を待つことです。 解決するには:
await db.then(() => 1);
些細なことで、実際のコードには実際には必要ありません。しかし、それでもそれは良い習慣だと思います。
実際のテストは、mongod
を停止することによって行われます。 または、サーバーに到達できないようにしてからリクエストを発行します。
接続オプションを{ bufferMaxEntries: 0 }
に設定したので これは、すぐに データベースにコマンドを発行しようとすると、実際の接続が存在しない場合は失敗が返されます。
もちろん、データベースが再び利用可能になると、エラーは発生せず、指示は正常に実行されます。
オプションがない場合、デフォルトでは、接続が解決されるまで操作を「キューに入れる」ことであり、その後、「バッファ」は基本的に「再生」されます。
mongod
を「停止」することで、これを(私が行ったように)シミュレートできます。 デーモンと発行要求。次に、デーモンを「起動」して要求を発行します。キャッチされたエラー応答を返すだけです。