2017-12-02 202 views
0

我有一个routes.js这样的:HapiJS路由问题

server.route({ 
    method: 'GET', 
    path: '/marvel/universal/verify/{serial?}', 
    handler: function(request, h) { 
    let obj = { "test": "a" }; 
    Db.find('marvel', obj, 1, function(result) { 

    }); 
     return h.response(result); 
    } 
}); 

和使用官方的MongoDB包节点像这样的钩到MongoDB的一个数据库模块:

function find(collection, data, limit, callback) { 
    mongo.db.collection(collection).findOne(data, function(err, r) { 
    callback(r); 
    }); 
} 

很显然,我可以”牛逼从匿名函数callback返回结果我凭什么结果传递给h.reponse(result)

+0

你可以这样做,因为它是包裹的匿名函数处理程序中,仅当您的回调 –

+0

中调用h.response'h.response'是不是在回调可用。 –

+0

我认为h.response可用,你试过了吗? –

回答

1

一些调试后,高致病性禽流感可以让你回到一个承诺,所以返回结果中承诺的作品!

server.route({ 
    method: 'GET', 
    path: '/marvel/universal/verify/{serial?}', 
    handler: function(request, h) { 
     let obj = { "test": "a" }; 
     return new Promise(function(resolve,reject){ 
     Db.find('marvel', obj, 1, function(result) { 
      resolve(h.response(result)); 
     }); 
     }); 
    } 
}); 
+0

当你返回h.response(undefined)时会发生什么?结果的价值是什么? –

+0

什么是为此事h值,我更新了我什么,我建议代码。虽然我也建议你使用Node.js的调试器,看看该回调内部的变量,看他们是否正在定义或不 –

+0

'request'和'h'做工精细,当他们是'Db.find外'...包装。一旦他们在这个匿名函数中,他们将失去访问权将数据返回到'handler'的词法上下文中。 –