gpt4 book ai didi

node.js - Express JS 路由器中间件抽象

转载 作者:搜寻专家 更新时间:2023-10-31 23:23:55 26 4
gpt4 key购买 nike

我使用 Node.js + Express JS 开发了一个 API,我使用基于 token 的身份验证。

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

为了解决我为 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,res, 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”,服务器会检查 token ,但不会让我进入。我知道如果我更改 app.use 的顺序,它会起作用,但我不明白为什么要以这种方式工作,如果我是使用“路由器中间件”。

有人知道吗?

最佳答案

发生这种情况是因为如果使用 express router 实现,那么如果您看一下它,您将能够很容易地理解它。这是路径:node_modules/express/lib/router/index.js。每次调用 Router() 时,就像您的情况一样

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

这个函数将被调用:

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

确实每次都返回一个不同的路由器实例。区别在于 use 注册中间件的方式。如您所见,use 是针对 proto.use

注册的
proto.use = function use(fn) { ... }

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

关于node.js - Express JS 路由器中间件抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40261588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com