Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 快速JS路由器中间件抽象大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
使用Node.js Express JS开发了一个API,我使用基于令牌的身份验证.

在这个api,userRoute(/ USER)和postRoute(/ POST)中使用了两个不同的路由器. postRoute可以在身份验证中使用,但userRoute需要令牌.

为了解决这个问题,我为userRoute使用路由器中间件,但它干扰了portRoute

这是代码

...

var postRoute = express.Router();
var userRoute = express.Router();


// Route middleware to verify a token
userRoute.use(function(req,res,next) {
    security.checkToken(req,next);
});


userRoute.route('/users') 
    .get(userCtrl.findAllUsers)
    .post(userCtrl.addUser);


postRoute.route('/posts') 
    .get(userCtrl.findAllPosts)
    .post(userCtrl.addPost);


app.use(userRoutE);
app.use(postRoutE);

...

如果我尝试访问’/ posts’服务器检查令牌并且不让我进去.我知道如果我改变app.use的顺序它是有效的,但我不明白为什么这样工作如果我使用“路由器中间件”.

有人知道吗?

解决方法

发生这种情况是因为如果快速路由器实现,如果您查看它,您将能够非常容易地理解它.这是路径:node_modules / express / lib / router / index.js.每次调用Router()时,就像你的情况一样

var postRoute = express.Router();
var userRoute = express.Router();

调用函数

var proto = module.exports = function(options) { ... }

并且确实每次都返回一个不同的路由器实例.不同之处在于使用注册中间件的方式.正如您所看到的那样,它是针对proto.use注册

proto.use = function use(fn) { ... }

这意味着您在那里注册的中间件将为您定义的路由器的每个实例注册.

大佬总结

以上是大佬教程为你收集整理的node.js – 快速JS路由器中间件抽象全部内容,希望文章能够帮你解决node.js – 快速JS路由器中间件抽象所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。