我正在尝试使用express nodejs和JWT。这是我所经历过的源代码:link。
除了我在jwt.js文件中声明的路由外,我保护所有路由。
'/trial'
网址不受保护。控制器位于trial.controller.js
文件中。当我使用get
和post
方法并且没有任何授权(No Auth
)来访问邮递员中的URL时,我得到了期望的结果。'/users/testdata'
时,不会发生相同的事情。它不受保护,但是如果我使用get
方法并且没有任何身份验证就将其击中,它将在邮递员中返回error 500
并显示消息"Cannot read property 'sub' of undefined"
。但是,当我使用post
方法击中它时,我得到了期望的结果。那么get
方法又有什么问题呢?
请参阅上面的链接以获取完整的代码。任何帮助对我来说都非常重要。谢谢!
答案 0 :(得分:3)
发生此问题是因为在路由router.get('/:id', getById);
之前定义了路由router.get('/testdata', getTest);
。因此,当您执行对/testdata
路由的请求时,该请求由/:id
路由处理,该请求需要身份验证才能工作,并使用currentUser.sub
属性,尽管currentUser
变量当前未定义。
只需更改顺序
router.get('/:id', getById);
router.get('/testdata', getTest);
到
router.get('/testdata', getTest);
router.get('/:id', getById);