您正在使用loginCallback出的功能(REQ,水库,旁边),从而REQ,水库范围和未来超出范围,他们无法访问。你可以访问这个喜欢
router.get('/login', function(req,res,next) {
// send call to login function.
var ID= req.query.ID;
var Password = req.query.Password
function LoginCallback(err,myLoginResult){
res.json(myLoginResult);
}
ctlLogin.login(ID,Password, LoginCallback);
});
,或者如果ctlLogin功能询问服务承诺可以使用的承诺,而不是回调
ctlLogin.login(ID,Password)
.then(LoginCallback)
.catch(console.log(err))
,或者如果你想LoginCallback功能出的功能范围(REQ,水库,接下来),那么你需要通过创建一个回调函数来传递该函数中的res,然后通过传递错误,结果和res或者使用bind来调用LoginCallback函数。
function sendResponseToSever(res, err, myLoginResult){
if(err){
return res.send({
errors: err,
status: 500 // what ever status code you want to set
});
}
return res.json(results);
}
router.get('/login', function(req,res,next) {
// send call to login function.
var ID= req.query.ID;
var Password = req.query.Password
ctlLogin.login(ID,Password, sendResponseToSever.bind(null, res)
//using bind function
// OR
ctlLogin.login(ID,Password, function(err, myLoginResult){
sendResponseToSever(err, myLoginResult, res);
// now sendResponseToSever is a generic function which you can call
// from any route
});
});
});
但是如果你想避免回调地狱,最好的方法是使用promise。 正如你所提到的你想避免嵌套,你可以通过使用promise来避免它。
请参阅https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise如果你想了解的承诺
*“这是不好的使用
bind
您的代码重写足够我需要发送回调函数到登录方法“*为什么? – 4castle
我想同步工作。 – Dani
我的意思是,你为什么认为回调是坏设计?他们是相当标准的,但如果你想要一个替代品,你可以返回一个承诺。 – 4castle