如何在变量中设置返回值并在特定操作中的其他位置使用(就像ruby中的实例变量一样)

时间:2015-08-10 20:07:45

标签: node.js mongodb express

app.get('/sitemap',function(request,response){
    var query =  JSON.stringify(request.query.transaction_id).replace(/(^"|"$)/g, '').replace(/\s+/, "") ;

    var transaction_details = MongoClient.connect(uri,function(err,db){
        db.collection('TransactionStatus',function(err,collection){
            if(err) {
                throw err;
            } else {
                collection.findOne({_id:query},function(err, doc){
                    return doc;
                });
            }
        })
    })

    console.log(transaction_details);

    response.render(path.join(__dirname+'/sitemap.ejs'),
        {details:transaction_details}
    );
});

使用变量transaction_details渲染文件时,我得到**** undefined ****。我无法在transaction_details中设置返回值。我是Nodejs的新手,所以任何帮助或建议都将不胜感激。

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

你不能像这样的异步电话return ......你需要利用回调:

app.get('/sitemap',function(request,response){
    var query =  JSON.stringify(request.query.transaction_id).replace(/(^"|"$)/g, '').replace(/\s+/, "") ;

    var transaction_details = function(callback) {
        MongoClient.connect(uri,function(err,db) {
            db.collection('TransactionStatus',function(err,collection){
                if(err) {
                    throw err;
                } else {
                    collection.findOne({_id:query},function(err, doc){
                        callback(doc);
                    });
                }
            })
        })
    }

    transaction_details(function(data) {
        response.render(path.join(__dirname+'/sitemap.ejs'),
            {details:data}
        );
    });
});