MongoDB 自定义包装器代码检查:我编写的代码是否正常?
MongoDB custom wrapper code check: Am I writing ok code?
我想知道我在这里写的代码是否合理并遵循非阻塞规则,我来自 Java 背景所以我是 [的非阻塞事件循环的新手=23=].
retard.js:
var MongoClient = require('mongodb').MongoClient;
var retard = {};
retard.getDb = function (url) { // url example 'mongodb://localhost:27017/myproject'
return new Promise(function (resolve, reject) {
MongoClient.connect(url, function (err, db) {
if (err)
throw err;
// custom functions
db.getCollection = function (mCollection) {
var obj = {};
var collection = db.collection(mCollection);
// access to the native drivers
obj.native = collection;
obj.findOne = function (query) {
return new Promise(function (resolve, reject) {
collection.findOne(query, function (err, result) {
if (err)
throw err;
resolve(result);
});
});
};
return obj;
};
resolve(db);
});
});
};
module.exports = retard;
这将按如下方式使用:
var co = require('co');
var config = require('./config');
var retard = require('./lib/retard');
co(function* () {
var db =
yield retard.getDb(config.mongodb.url);
var countries = db.getCollection('countries');
// first query
var doc =
yield countries.findOne({
country: 'scotland'
});
console.log(JSON.stringify(doc));
// second query
countries.native.findOne({
country: 'scotland'
}, function (err, result) {
if (err)
throw err;
console.log(JSON.stringify(result));
});
});
我从数据库中得到了我期望的结果,所以它可以工作。我很好奇这样可以吗Java脚本?
快到了!要记住的是 mongodb 驱动程序方法已经 return 如果没有传递回调 (findone) 一个 Promise。
您可以 return 方法本身(一个 Promise),而不是用新的 Promise 包装方法,如下所示:
return collection.findOne(query)
相对于:
return new Promise(function (resolve, reject) {
collection.findOne(query, function (err, result) {
if (err)
throw err;
resolve(result);
});
});
同样适用于 MongoClient.connect();
我想知道我在这里写的代码是否合理并遵循非阻塞规则,我来自 Java 背景所以我是 [的非阻塞事件循环的新手=23=].
retard.js:
var MongoClient = require('mongodb').MongoClient;
var retard = {};
retard.getDb = function (url) { // url example 'mongodb://localhost:27017/myproject'
return new Promise(function (resolve, reject) {
MongoClient.connect(url, function (err, db) {
if (err)
throw err;
// custom functions
db.getCollection = function (mCollection) {
var obj = {};
var collection = db.collection(mCollection);
// access to the native drivers
obj.native = collection;
obj.findOne = function (query) {
return new Promise(function (resolve, reject) {
collection.findOne(query, function (err, result) {
if (err)
throw err;
resolve(result);
});
});
};
return obj;
};
resolve(db);
});
});
};
module.exports = retard;
这将按如下方式使用:
var co = require('co');
var config = require('./config');
var retard = require('./lib/retard');
co(function* () {
var db =
yield retard.getDb(config.mongodb.url);
var countries = db.getCollection('countries');
// first query
var doc =
yield countries.findOne({
country: 'scotland'
});
console.log(JSON.stringify(doc));
// second query
countries.native.findOne({
country: 'scotland'
}, function (err, result) {
if (err)
throw err;
console.log(JSON.stringify(result));
});
});
我从数据库中得到了我期望的结果,所以它可以工作。我很好奇这样可以吗Java脚本?
快到了!要记住的是 mongodb 驱动程序方法已经 return 如果没有传递回调 (findone) 一个 Promise。 您可以 return 方法本身(一个 Promise),而不是用新的 Promise 包装方法,如下所示:
return collection.findOne(query)
相对于:
return new Promise(function (resolve, reject) {
collection.findOne(query, function (err, result) {
if (err)
throw err;
resolve(result);
});
});
同样适用于 MongoClient.connect();