gpt4 book ai didi

javascript - 检查动态路由 express js

转载 作者:行者123 更新时间:2023-11-30 20:07:00 26 4
gpt4 key购买 nike

我有一些路由,例如 /login/:provider/:id,当执行请求时,它会得到类似 /login/provider1/123 的内容。到目前为止一切都很好,但是当我想要某些路由而无需对我的中间件进行身份验证时,问题就出现了。

到目前为止,我已经尝试过这样的:

public static getString(value: String): String {
let values = value.split('/');
if (values.length <= 2) return value;
return values.slice(0, values.length - 1).reduce(((previousValue, currentValue) => {
return previousValue + "/" + currentValue;
}));
}

但它不是很通用,不能涵盖所有情况。

它应该匹配原始路由的是:

/login/anything/anything

所以我选择这条路线:/login/:provider/:id 有 3 个部分:[login, provider, id] 所以任何从/login 开始并且具有相同数量段的东西都应该匹配。

并且它不应该匹配任何没有相同长度段的东西。

我的问题是:是否有任何特定的方法可以在发出请求后不循环地获取原始路由?我问的问题可以通过正则表达式实现吗?

最佳答案

我认为您的路线需要自定义验证器。

您可以创建路由器。

var app = express();
var router = express.Router();

router.param(function(param, validator) {
return function(req, res, next, val) {
// You have full access to req. So you can get anything from it.
if (validator(val)) {
next(); //validator success no need for authorization.
} else {
if (req.headers.Authentication) {
next() //Validator failed but we have token in header and it is valid.
} else {
res.sendStatus(403); //Validator failed and token does not exists.
}
}
}
});


router.param('provider', function(candidate) {
return candidate === 'myprovider' //Provider condition that will bypass authorization.
});

router.get('/login/:provider/:id', function (req, res) { //register the route
res.send('OK');
});

app.use(router);

编辑 2(另一次尝试):

app.all('/:id/:name', (req, res, next) => {
console.log(req.params);
next();
});

这将只匹配这种类型的路由。它会在他们之前工作,因此您可以访问所需的每个参数。

关于javascript - 检查动态路由 express js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52822417/

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