Javascript 如何优雅地捕获节点中的jsonwebtoken错误&;表示

Javascript 如何优雅地捕获节点中的jsonwebtoken错误&;表示,javascript,node.js,express,json-web-token,Javascript,Node.js,Express,Json Web Token,以下是我的验证功能: exports.validateToken = function(req, res, next){ var token = req.body.token; jwt.verify(token, config.sessionSecret, function(err, decoded) { if(err){ return next(err); }else{ var userToken = jwt.sign(req.b

以下是我的验证功能:

exports.validateToken = function(req, res, next){
  var token = req.body.token;
  jwt.verify(token, config.sessionSecret, function(err, decoded) {
     if(err){
         return next(err);
     }else{

        var userToken = jwt.sign(req.body.user, config.secret,{
            expiresIn:10000
        });

        res.json({token: userToken})

    }    
  });
}
我期望有一个错误定义,但除此之外,我还得到了一个内部服务器错误:

TokenExpiredError: jwt expired
at Object.JWT.verify (/Users/Developer/node_modules/jsonwebtoken/index.js:209:19)
at exports.validateToken (/Users/Developer/app/controllers/user.signing.controller.js:369:9)
at Layer.handle [as handle_request] (/Users/Developer/node_modules/express/lib/router/layer.js:76:5)
at next (/Users/Developer/node_modules/express/lib/router/route.js:100:13)
at Route.dispatch (/Users/Developer/node_modules/express/lib/router/route.js:81:3)
at Layer.handle [as handle_request] (/Users/Developer/node_modules/express/lib/router/layer.js:76:5)

我做错了什么?

出于某种原因,下一个响应不起作用。因此,我用以下代码替换了它,一切正常:

res.status(401).send({error:'invalid token'});

我在我的代码中尝试过这个。
res.locals.data
有助于将数据传送到调用函数

只需将调用函数中的数据作为
res.locals.data
,您的问题就有望得到解决

if (err) {
    res.locals.data = {
        err: err.name,
        message : err.message
    }
    return next();
}
编辑
警告:这是使用
jwt.decode
而不是
jwt.verify
。由于JSON Web令牌总是可以在不知道密钥的情况下进行解码,因此前一个代码只有来自插入源时才有效。

是指向
return next(err)的错误行
var userToken=jwt.sign(req.body.user,config.secret,{
?None.到jwt.verify(…所以问题是,
为什么不返回下一个(err);
接收和处理
err
?是的。我还尝试{..}catch(err){…}以确保下一个(err)中的问题不返回(err).但同样的情况。我看不出lib有什么问题:-这是您正在使用的模块吗?为什么不是
401
未经授权的响应?
const jwt = require('jsonwebtoken')

module.exports =  function auth (req,res,next) {
    const token =req.header('x-auth-token')
    if (!token){
        return res.status(401).send('to\'ken not found')
    }
 try{
        const decoded = jwt.decode(token,'m@hf1y')
         req.user = decoded
         next()

 }catch (e) {
     
     return  res.status(400).send('invalid token')
 }
}