在Express.js中,如何设置路由名称,以便以后只需调用该路由名称即可检索相应的URL?
File app.ts:
app.use('/api', apiRouter);
File api.ts:
router.use('/auth', authRouter);
File auth.ts:
router.get('/login', AuthController.login).as('my route name');
or
app.get('/login', AuthController.login, name='my route name');
...
output:
res.send(anyFunction('my route name')) // => /api/auth/login | https://example.com/api/auth/login
字符串
任何示例或文档。谢啦,谢啦
更新03/08/2023
虽然我对它并不完全满意(我最初的意图是找到一个像Laravel这样的全自动解决方案),但我可以接受它。我根据Answers的建议编写了route.url.ts文件。
route.url.ts
function replaceParams(urlReplace: string, params: { [key: string]: string } = {}): string {
const queryParams: { [key: string]: string } = { ...params };
const url: string = urlReplace.replace(/:([a-zA-Z0-9]+)(\(.+?\))?/g,
(match, paramName, regexPart) => {
delete queryParams[paramName];
const regex = regexPart ? new RegExp(regexPart.slice(1, -1)) : null;
return params[paramName] && (!regex || regex.test(params[paramName])) ? params[paramName].toString() : ':' + paramName;
});
const queryString: string = Object.keys(queryParams)
.map((key) => key + '=' + queryParams[key])
.join('&');
return queryString ? (url.includes('?') ? `${url}&${queryString}` : `${url}?${queryString}`) : url;
}
export default (routeName: string, params: { [key: string]: string } = {}): string => {
const appUrl: string = process.env.APP_URL || '';
switch (routeName) {
case 'api.a':
return replaceParams(`${appUrl}/api/a/:user_id`, params);
case 'api.b':
return replaceParams(`${appUrl}/api/b/:user_id([a-z0-9]+)`, params);
case 'api.c':
return replaceParams(`${appUrl}/api/c/`, params);
default:
return '';
}
};
型
app.ts
app.get('/', function (req, res){
res.json({
a: routeUrl('api.a', { user_id: 'user12321423432' }),
b: routeUrl('api.b', { user_id: 'user12321423432' }),
c: routeUrl('api.c', { user_id: 'user12321423432' })
});
});
型
输出
{"a":"http://127.0.0.1:8000/api/a/user12321423432","b":"http://127.0.0.1:8000/api/b/user12321423432","c":"http://127.0.0.1:8000/api/c/?user_id=user12321423432"}
型
我希望我能得到比这更好的东西
3条答案
按热度按时间5vf7fwbs1#
您可以添加一个middleware,它在
res
的locals属性上添加路由名称。像这样的-字符串
在你的控制器里,你可以-
型
2nc8po8w2#
首先,你必须创建一个单独的路由文件,导入你的所有控制器。
在你的
app.ts
中添加代码(我假设这是你的主文件)字符串
并添加您的路由器代码如下所示:
routes.ts
个型
mdfafbf13#
你应该添加一个新的功能。这个函数返回你想要的路由的原始url。
字符串
然后,将函数导入到
auth.controller.ts
型