/查询/ function select(a_where,a_data) {
var t_ret=0;
t_ret= db_connector.collection(a_where, function(err, collection) {
collection.find(a_data, function(err, value){
value.toArray(function(err,arr){
return ''true";
})
});
}); return '’false"; }
现在调用select 虽然里面的代码执行了可是一直返回false 我明白他为什么会返回 false 但是不知道该如何修改让他返回true
15 回复
node的api里到处都是回调,所以我们也要习惯这种编程方式。。。 以往我们想获得方法的返回值都是这么写:var foo=bar(); 但是现在得这么写: bar( function(result){foo=result}); 推荐看一下step,可以避免callback的嵌套,https://github.com/creationix/step
@beiyio 你那个方法还要修改一下(我提供一下参考代码)
Foods.find = function(option, callback){
mongodb.open(function(err, db){
if(err)throw err;
db.collection('Foods', {safe : true}, function(err, collection){
collection.find({}, function(err, foods){
if(err)throw err;
callback(err, foods);
db.close();
});
});
});
}
差不多都以回调的方式,你试一下
@beiyio node里面要获得方法返回值一般不会直接用等号,像这样:var result=someFunction(); 而是传一个callback进去:
// the definition of the function
function someFunction(callback){
//do some work
callback('true')//invoke the callback to give it the result;
}
//invoke the function
someFunction(function callback(result){
//now you get the result;
});
@beiyio 我把代码全给你吧以下是 (1)food文件的代码
var mongodb = require('./db');
function Foods(food){
this.name = food.name;
this.imgUrl = food.imgUrl;
this.money =food.money;
this.source = food.source;
this.address = food.address;
this.time = food.time;
}
module.exports = Foods;
Foods.get = function get(option, callback){
mongodb.open(function(err, db){
if(err){
return callback(err);
}
db.collection('Foods', function(err, collection){
if(err){
mongodb.close();
return callback(err);
}
var query = {};
collection.find(query).sort({time:-1}).toArray(function(err, docs){
mongodb.close();
if(err){
return callback(err);
}
return callback(null, docs);
});
});
});
}
(2)db的代码如下 :
var setting = require('../settings'),
mongo = require('mongodb'),
Db = mongo.Db,
Connection = mongo.Connection,
Server = mongo.Server;
module.exports = new Db(setting.db, new Server(setting.host, Connection.DEFAULT_PORT, {}));
(3)你再写一个测试页:
var Foods = require('food');
Foods.get({name : 'lif_testName'}, function(err, data){
if(err)throw err;
console.log(data);
});
按上面的三步一定行的