它输出
db.close
You've successfully connect to mongo mongodb://localhost/foo
findOne
{ MongoError: Topology was destroyed
我希望db.close
在猫鼬回调之后运行 。请说明节点如何精确运行Mongoose回调?
PS setTimeout起作用,但仅在> 100时起作用
/*
echo 'db.logos.insert({
"name": "localhost",
"path": "path/to/logo",
});
' | mongo foo
*/
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://localhost/foo';
mongoose.connect(MONGODB_URI, () => {
// init
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error: '));
db.once('open', () => {
// we're connected!
console.log(`You've successfully connect to mongo ${MONGODB_URI}`);
});
const logoSchema = new mongoose.Schema({
name: String,
path: String,
});
const Logo = mongoose.model('Logo', logoSchema);
Logo.findOne({ name: 'localhost' }, (err, found) => { // logo name
console.log('findOne');
if (err) {
console.log(err);
// MongoError: Topology was destroyed
} else if (found) {
console.log(found);
} else {
console.log('not found');
}
});
// this
/*
setTimeout(() => {
console.log('db.close');
db.close();
}, 100);
// or
*/
process.nextTick(() => {
console.log('db.close');
db.close();
});
/* // uncomment block
async function foo() {
const logo = await Logo.findOne({ name: 'localhost' }).exec();
console.log(logo);
// db.close();
}
//foo();
(async () => {
try {
await foo();
db.close();
} catch (err) {
// unhandled rejection
console.log(err);
}
})()
*/