gpt4 book ai didi

javascript - express JS : middleware based on regex

转载 作者:行者123 更新时间:2023-12-04 18:01:31 25 4
gpt4 key购买 nike

我在使用 expressJS 4 中的正则表达式匹配功能时遇到路由问题。

我想使用 app.use() 来定义哪些路由可用于不是以 /api 开头的 url>

routesWebAuth.js

var express = require('express');
var router = express.Router();
var webAuthenticationCtrl = require('controllers/web/auth.js');

router.post('/auth/login', webAuthenticationCtrl.login);
router.get('/auth/isLogged', webAuthenticationCtrl.isLogged);
router.get('/auth/logout', webAuthenticationCtrl.logout);

没有正则表达式的 app.js

function routeinfo(req, res) {
console.log("matched : " + req.path);
next();
}
//we accept all routes
app.use('/', routeinfo, routesWebIndex);

对于请求localhost/auth/login它返回:匹配:/auth/login

带正则表达式的 app.js

function routeinfo(req, res) {
console.log("matched : " + req.path);
next();
}
var regex_notApi = /^\/(?!(api))/;
//only the route not starting by /api
app.use(regex_notApi, routeinfo, routesWebIndex);

对于请求 localhost/auth/login 它返回:matched:/

问题是,在我使用 RegEx 的情况下,路由 /auth/login 不匹配,因为路由器提供的是 url / 而不是/授权/登录。我该如何解决这个问题?

最佳答案

我知道为时已晚,但我认为这个正则表达式可以工作:

/^\/((?!api).)*/i
app.use(/^\/((?!api).)*/i, myFunc);

这匹配/, /auth, /auth/login, /foo, /foo/bar 和 ...
而且它不匹配/api, /api/, /api/foo 和...
请注意,它也不匹配 /apibar/foo ,我不知道这是否是您的用例。

您还可以在此处测试快速正则表达式路由:http://forbeslindesay.github.io/express-route-tester/

关于javascript - express JS : middleware based on regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613962/

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