gpt4 book ai didi

node.js - MongoDB自定义包装器代码检查: Am I writing ok code?

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:20 26 4
gpt4 key购买 nike

我想知道我在这里编写的代码是否合理并遵循非阻塞规则,我来自 Java 背景,所以我对 Node.js 的非阻塞事件循环很陌生。

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));
});

});

我从数据库中得到了我期望的结果,所以它可以工作。我只是好奇这可以JavaScripting吗?

最佳答案

快到了!需要记住的是,如果没有传递回调,mongodb 驱动程序方法已经返回 Promise ( findone )。您可以只返回方法本身(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();

关于node.js - MongoDB自定义包装器代码检查: Am I writing ok code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com