Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在自己的函数中定义回调函数?NodeJS_Javascript_Node.js_Callback - Fatal编程技术网

Javascript 如何在自己的函数中定义回调函数?NodeJS

Javascript 如何在自己的函数中定义回调函数?NodeJS,javascript,node.js,callback,Javascript,Node.js,Callback,我是nodeJS新手,遇到了以下问题:我在我的一个控制器中定义了一个函数,我想验证一个jsonweb令牌。我使用了以下功能: exports.validate = function (token, cb) { jwt.verify(token, secretToken, cb(err, decoded)); } AuthController.validate(req.headers['api-token'], function(err, decoded){ if(err){ conso

我是nodeJS新手,遇到了以下问题:我在我的一个控制器中定义了一个函数,我想验证一个jsonweb令牌。我使用了以下功能:

exports.validate = function (token, cb) {
   jwt.verify(token, secretToken, cb(err, decoded));
}
AuthController.validate(req.headers['api-token'], function(err, decoded){ 
if(err){ console.log('Error: ', err);
   res.status(401); next(); 
} else if(decoded) { 
   console.log('Success: ', decoded); 
   next(); 
} 
})
function cb(err, decoded) {
    // do stuff with err and/or decoded
}
jwt.verify(token, secretToken, cb);
但每次我想运行它时,nodeJS都会给我一个错误,“err”没有定义?在jwt示例中,有以下示例:

// verify a token symmetric
jwt.verify(token, 'shhhhh', function(err, decoded) {
   console.log(decoded.foo)
});
所以很明显我出了什么问题,但我不知道是什么。我也不知道该找什么。。。我做了一些谷歌搜索,但到目前为止没有任何帮助

我很想听到你的消息

问候

//编辑:这就是我调用函数的方式:

exports.validate = function (token, cb) {
   jwt.verify(token, secretToken, cb(err, decoded));
}
AuthController.validate(req.headers['api-token'], function(err, decoded){ 
if(err){ console.log('Error: ', err);
   res.status(401); next(); 
} else if(decoded) { 
   console.log('Success: ', decoded); 
   next(); 
} 
})
function cb(err, decoded) {
    // do stuff with err and/or decoded
}
jwt.verify(token, secretToken, cb);

在jwt示例中,
verify
的第三个参数是一个函数(使用函数表达式创建)

在代码中,第三个参数是返回值或调用
cb(err,decoded)
cb
函数可能返回一个函数,但是
err
是一个传递给它的变量

如果要使用名为
cb
的函数,请定义该函数,然后传递该函数:

exports.validate = function (token, cb) {
   jwt.verify(token, secretToken, cb(err, decoded));
}
AuthController.validate(req.headers['api-token'], function(err, decoded){ 
if(err){ console.log('Error: ', err);
   res.status(401); next(); 
} else if(decoded) { 
   console.log('Success: ', decoded); 
   next(); 
} 
})
function cb(err, decoded) {
    // do stuff with err and/or decoded
}
jwt.verify(token, secretToken, cb);

如果希望函数与回调一起使用,则应按以下方式使用:

exports.validate = function (token, cb) {

    jwt.verify(token, secretToken, function (err, decoded) {
        if (err)
            return cb(err, null);

        // callback have to handle error
        return cb(null, decoded);
    }
}

你为什么要调用这个函数?我不明白?你指的是哪个功能?就像我说的,我对nodeJS很陌生。也许我没有正确理解回调的概念。你会怎么做呢?这里没有特定于节点的东西,回调是一种非常常见的JavaScript模式。下面是我如何使用它的:AuthController.validate(req.headers['api-token'],函数(err,decoded){if(err){console.log('Error:',err');res.status(401);next();}else if(decoded){console.log('Success:',decoded);next();});我更新了我的第一篇文章,把它包括进去。到目前为止,我理解这个概念,这就是为什么我不理解,为什么上面的方法不起作用。在我看来,我做的一切都是对的。有一个更简单的解决方案。你能发现它吗?返回cb(错误,已解码),对吗?:)那是我的错?我必须返回函数?@Bergi It将其分为两部分,因为在最后一次返回之前,您通常需要对结果(此处已解码)进行处理。否。我的意思是
jwt.verify(token,secretToken,cb),因为我没想到OP会对结果做一些事情。