我正在尝试使用node-proxy来自动神奇地读/写数据库,我无法找到解决方案。 这是代码:
var Proxy = typeof Proxy !== "undefined" ? Proxy : require("node-proxy");
var db = require('mongojs').connect('testdb',['colldb']);
function itemHandler(objid) {
var objid=objid;
return Proxy.create({
get: function(receiver, name) {
var name = name;
var hmmm;
//Problem Area!
db.colldb.findOne({"_id": db.ObjectId(objid)},function(err,doc){
hmmm = doc[name];
});
//Hmmm will obviously be undefined
return hmmm;
}
, set: function(receiver, name, val) {
// this can be async and I don't care :)
}
});
}
var test = itemHandler('4efc0c698b7e904ee982547f');
console.log(test.test);
process.exit(0);
通常情况下我会回复一下,但我不确定如何使用'get'方法返回node-proxy。 我正在寻找任何解决方案,我可以根据数据库结果返回代理数据。
由于
答案 0 :(得分:1)
首先,由于最后的process.exit(0)
行,此示例中没有任何内容可行。程序将在异步函数完成之前终止。
其次,您无法从异步函数的结果中返回值。这是一个基本概念。我不熟悉mongojs
,但也许以下内容可行(我相信它会与Mongoose一起使用)。
...
return Proxy.create({
get: function(receiver) {
return db.colldb.findOne({"_id": db.ObjectId(objid)});
});
...
然后最后一行会是这样的:
itemHandler('4efc0c698b7e904ee982547f').exec(function (err, doc){
console.log(doc.test);
});
或者,您可以能够返回承诺/未来。类似的东西:
...
return Proxy.create({
get: function(receiver, name) {
var name = name
, promise = new Promise(); // You'll need a library for this, of course.
db.colldb.findOne({"_id": db.ObjectId(objid)}, function (err, doc){
promise.complete(doc[name]);
});
return promise;
});
...