Я нахожусь в процессе написания маршрутизатора, который использует JSON объект в качестве манифеста. Маршрутизатор использует манифест JSON в качестве ссылки для маршрутизации входящих запрошенных путей URL. Приведенный ниже код принадлежит main. js, который запускается с помощью команды node для запуска приложения. В верхней части документа вы можете видеть объект маршрутизатора, который принимает в качестве аргумента манифест JSON. Ниже этого бита кода находится еще один бит, который показывает документ маршрутизатора, в который записан класс маршрутизатора, вы можете увидеть, как я пытаюсь направить запрос с помощью этого JSON манифеста.
const app = require('./serv/katanaLib');
const Router = require('./serv/router');
var router = new Router.Router({
"^/(.*)$" : "/public/view/page/:[?]",
"^/user/(.*)$" : "/public/view/account/:[?]",
"^/style/(.*)$" : "/public/style/:[?]"
});
app.Server(8888, function(request, response)
{
const $_Request = app.parseHttpReq(request);
router.onReq($_Request);
});
- Ниже находится маршрутизатор. js, вот где у меня проблема, которую я объясню в нижней части этого вопроса.
module.exports.Router = class Router
{
constructor(JSON_manifest)
{
this.manifest = JSON_manifest;
this.keys = Object.keys(JSON_manifest);
this.values = Object.values(JSON_manifest);
};
onReq($_Request)
{
this.keys.forEach((key, i)=>
{
key = ('^' + key + '$');
var re = new RegExp(key, 'i');
let x = $_Request.path.search(re);
console.log('\n\n' + key);
console.log(re);
console.log(x + '\n\n');
});
};
};
Как любой может очевидно, я пишу регулярные выражения в ключи манифеста JSON. Вы можете видеть, что я ищу требуемый путь, используя foreach l oop, циклически проходя по каждому ключу манифеста. У меня проблема в том, что мои значения регулярных выражений совпадают несколько раз. Когда я запускаю приведенный выше код и отправляю следующий запрос на мой сервер.
Request Recieved:
Parsed-Request:
{ path: '/index', method: 'GET', ext: '', type: 'text/html' }
^^/(.*)$$
/^^\/(.*)$$/i
0
^^/user/(.*)$$
/^^\/user\/(.*)$$/i
-1
^^/style/(.*)$$
/^^\/style\/(.*)$$/i
-1
это желаемый результат, но когда я запускаю:
я получаю. ..
Parsed-Request:
{ path: '/user/abc', method: 'GET', ext: '', type: 'text/html' }
^^/(.*)$$
/^^\/(.*)$$/i
0
^^/user/(.*)$$
/^^\/user\/(.*)$$/i
0
^^/style/(.*)$$
/^^\/style\/(.*)$$/i
-1
Регулярное выражение соответствует как первому, так и второму, что нежелательно. Если я запросил http://localhost/style/123, запрошенный путь будет соответствовать первому ключу и третьему ключу. Если у кого-нибудь есть совет, как написать регулярное выражение, чтобы я мог закончить sh, это было бы здорово, спасибо ...