令牌不是在nodejs中创build的

我有一个函数,从MySQL数据库中select用户名,并返回结果发布请求如下:

function userAuthentication(user){ var deferred = Q.defer(); pool.getConnection(function(err, connection) { if (err) { var dbError = new Error('No db connection'); console.log(dbError); } else { var selectUserName = 'SELECT * FROM User WHERE username= '+connection.escape(user)+' '; connection.query(selectUserName, function(error, rows){ if(error){ console.log(error); deferred.reject(error); } else if(rows.length === 0){ var countError = new Error('No User Found'); console.log ("Database.js -> "+ countError); deferred.reject(countError); }else{ deferred.resolve(rows); } }); } connection.release(); }); return deferred.promise; 

}

函数userAuthentication从rout.post请求中调用

 router.post('/checkAuthentication', function(request, response) { database.userAuthentication(request.body.username).then(function(data) { if(data[0].RowDataPacket!=0){ if(bcrypt.compareSync(request.body.password,data[0].password)){ var token = jwt.sign({ username: data[0].username, }, superSecret,{ expiresInMinutes: 1440 }); console.log(token); // return the information including token as JSON response.json({ success: true, message: 'Token Created', token: token }); } else{ response.json({ success: false, message: 'Authentication failed. Wrong Password.' }); } }else{ response.json({ success: false, message: 'Authentication failed. User not found.' }); } }); }); 

我试图创build一个标记,当我检查input的用户名和密码是否匹配mysqlDb中的,但不幸的是,令牌不会被创build; console.log(token)行不打印任何结果到控制台。 什么是我失踪的部分? 我感谢你的帮助。

您使用哪个jwt节点模块?
我想这不是node-jsonwebtoken ,因为它不支持expiresInMinutes ,但只有expiresInMinutes

然而,你应该把jwt.sign()调用放在一个try / catch块中,来捕获它抛出的错误…:

 try { var token = jwt.sign( { username: data[0].username, }, superSecret, { expiresIn: 1440 * 60, } ); } catch(err) { console.error('error signing json web token:', err); }