错误返回值,Nodejs,JWT

时间:2016-05-06 22:15:06

标签: node.js return-value jwt

function isTokened(data) {
    var token = data;
    if(token != null || token != undefined){
        jwt.verify(token, app.get('userToken'), function(err, decoded) {        
            return {
                "user": decoded._doc.name,  
                "href": "/salir",
                "text": "Salir"
            };
        });
    }else{
        return {
            href: "/entrar",
            text: "Entrar"  
        };
    }
}
  1. TypeError:c:\ Users \ Hector \ Desktop \ Proyecto \ views \ index.jade:81
    79 | li 80 |
    a.text(href ='/ acerca')Acerca
      

    81 |如果是au.user 82 | li 83 | a.text(href =“/ area”)#{au.user} 84 |
      里          无法在eval处读取未定义的属性“user”(eval at
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \玉\ lib中\ index.js:218:8),   :354:8)在eval(eval at
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \玉\ lib中\ index.js:218:8),   :453:22)在exports.compile.res
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \玉\ lib中\ index.js:219:38)   在Object.exports.renderFile
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \玉\ lib中\ index.js:380:38)   在Object.exports.renderFile
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \玉\ lib中\ index.js:370:21)   在View.exports .__ express [作为引擎]
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \玉\ lib中\ index.js:417:11)   在View.render
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \表达\ lib中\ view.js:126:8)   在tryRender
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \表达\ lib中\的application.js:639:10)   在EventEmitter.render
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \表达\ lib中\的application.js:591:3)   在ServerResponse.render
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \表达\ lib中\ response.js:961:7)   在C:\ Users \ Hector \ Desktop \ Proyecto \ app.js:167:6在Layer.handle   [as handle_request]
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \表达\ lib中\路由器\ layer.js:95:5)   在下一个   (C:\用户\赫\桌面\ PROYECTO \ node_modules \表达\ lib中\路由器\ route.js:131:13)   在Route.dispatch
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \表达\ lib中\路由器\ route.js:112:3)   在Layer.handle [as handle_request]
      (C:\用户\赫\桌面\ PROYECTO \ node_modules \表达\ lib中\路由器\ layer.js:95:5)   在
      C:\用户\赫\桌面\ PROYECTO \ node_modules \表达\ lib中\路由器\ index.js:277:22

1 个答案:

答案 0 :(得分:1)

jwt.verify不是同步函数,因此您的函数最终退出而不返回任何内容。您需要使用回调方法来获取验证结果。你想要这样的东西:

function isTokened(data, callback) {
    if(data){
        jwt.verify(data, app.get('userToken'), function(err, decoded) {        
            callback && callback({
                "user": decoded._doc.name,  
                "href": "/salir",
                "text": "Salir"
            });
        });
    }else{
        callback && callback({
            href: "/entrar",
            text: "Entrar"  
        });
    }
}

如果jwt.verify返回错误或解码后不包含必填字段,您可能需要进行一些错误处理。