NodeJS, как написать регулярное выражение, чтобы иметь возможность динамически маршрутизировать пути - PullRequest
1 голос
/ 22 апреля 2020

Я нахожусь в процессе написания маршрутизатора, который использует 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, это было бы здорово, спасибо ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...