gpt4 book ai didi

node.js - 在express中有选择地应用中间件

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:23 27 4
gpt4 key购买 nike

我的路由器中有一个路由 /users 作为父后缀,所有后续路由都将附加父路由,例如。 /用户/详细信息

在我的 app.js 中

app.use('/api/v1/users', userRoutes);

在我的用户路由中

import express from 'express';
import users from '../controllers/user_controller';

import { authenticateRoute, authenticateSignedRoute, aclAuthenticator } from './../middlewares/AuthenticationMiddleware';

const router = express.Router();


//user routes
router.get('/details', authenticateRoute, aclAuthenticator, users.getDetails);
router.get('/posts', authenticateRoute, aclAuthenticator, users.getPosts);


module.exports = router;

我想做什么

有没有办法让我将authenticateRoute和aclAuthenticator中间件添加到父前缀路由,然后对于一个特定路由有一个异常(exception),即仅应用第三个中间件而不是前两个。

例如 app.use('/api/v1/users',authenticateRoute,aclAuthenticator,userRoutes);

我的新路由器文件

router.get('/details', applyOnlyThisMiddleWare, users.getDetails);
router.get('/posts', No MiddleWareAtAll, users.getPosts);

我基本上是在尝试覆盖初始中间件,这可能吗?

最佳答案

这就是我明确禁用特定路由的中间件的方法

'use strict';

const ExpressMiddleware = ( req, res, next ) => {

// dont run the middleware if the url is present in this array
const ignored_routes = [
'/posts',
'/random-url',
];

// here i am checking for request method as well, you can choose to remove this
// if( ! ignored_routes.includes(req.path) ) {
if( req.method === 'GET' && ! ignored_routes.includes(req.path) ) {
// do what you gotta do.
// next();
}
else {
next();
}

}


export default ExpressMiddleware;

在你的服务器/路由文件中

app.use( ExpressMiddleware );

当然,如果您使用动态路由,您可能需要更改代码..但这应该不难。

关于node.js - 在express中有选择地应用中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42278728/

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