为什么拆分后的Node.js认证路由使用错误JWT也能返回正常结果
你碰到的问题核心有两个:
- 你在
/lib/routes/convert.js中通过require('express')()创建了独立的全新Express实例,该实例和你index.js中使用的全局app实例完全隔离,你在这个独立实例上配置的JWT鉴权逻辑完全不会作用到主应用的请求链路中。 - 你当前index.js中挂载的是
./lib/api-calls/convert.js,如果你写的新路由存放在/lib/routes/convert.js,挂载路径不匹配也会导致你的新路由逻辑不生效。
修复方案
第一步:修改子路由文件/lib/routes/convert.js
不要在子路由中创建独立Express实例,改用Express官方推荐的Router来定义子路由,也不需要重复执行鉴权初始化逻辑:
// 用Router代替独立express实例 const router = require('express').Router(); router.get('/v3/convertw3w/:locationValue/:countryCode', function (req, res) { res.status(200).send({ status: 'OK' }); }); module.exports = router;
第二步:修改index.js配置
调整路由挂载路径,所有挂载到全局app下的路由会自动继承你在主应用中配置的JWT鉴权逻辑:
// Security Enabled index.js // const { app } = require ('./lib/deps/init_dependencies.js'); const { enableSecurity } = require("./security"); const main = async () => { // 全局开启JWT鉴权,所有后续挂载的路由都会生效 await enableSecurity(app); // 挂载你写的新路由,路径对应你实际存放的路由文件位置 app.use(require('./lib/routes/convert.js')); app.get('/v1/createSession:key/:limit', function (req, apiResponse) { // 原有正常工作的路由逻辑 }); } main()
内容的提问来源于stack exchange,提问作者TangoMike
相关产品推荐
相关产品推荐

