Express 4, соответствующий req.path с параметром URL

Russian Title Случай чрезвычайно сложный. И это не вычислимо. Период.

Лучшее, что вы можете получить, - это рутина, которая изменяет все маленькие слова в соответствии со списком ваших предпочтений. Это все равно будет ошибкой для всех словесных выражений. Хотя расширенный список вариантов мог бы захватить многие из них, некоторые из них по-прежнему невозможно было бы решить без семантического анализа. Два примера:

  • Выполнение On / On Empty
  • Работа над / над зданием

Последнее становится действительно понятным из контекста ; первое - нет. Существует явная разница в значении, но компьютер не может решить, что правильно.

(Иногда даже люди не могут. Я спросил о первом примере здесь форуме StackExchnge и не получил приемлемого ответа ..)

Вот список, который мне нравится; но некоторые четырехбуквенные слова (не предназначенные для каламбуров) - это личный выбор. Также некоторые могут утверждать, что все типы чисел, такие как any , , все , немного должны быть заглавными.

Это ничего, кроме элегантного, на самом деле это сокровенное сословие. Но он работает для меня довольно хорошо, поэтому я использую его на регулярной основе и кормил его 100 кбайтами.:

public string ETC(string title)
{  // english title capitalization
    if (title == null) return "";

    string s = title.Trim().Replace('`', '\'');      // change apo to tick mark

    TextInfo UsaTextInfo = new CultureInfo("en-US", false).TextInfo;
    s = UsaTextInfo.ToTitleCase(s);              // caps for all words

    // a list of exceptions one way or the other..
    s = s.Replace(" A ", " a ");
    s = s.Replace(" also ", " Also ");
    s = s.Replace(" An ", " an ");
    s = s.Replace(" And ", " and ");
    s = s.Replace(" as ", " As ");
    s = s.Replace(" At ", " at ");
    s = s.Replace(" be ", " Be ");
    s = s.Replace(" But ", " But ");
    s = s.Replace(" By ", " by ");
    s = s.Replace(" For ", " for ");
    s = s.Replace(" From ", " from ");
    s = s.Replace(" if ", " If ");
    s = s.Replace(" In ", " in ");
    s = s.Replace(" Into ", " into ");
    s = s.Replace(" he ", " He ");
    s = s.Replace(" has ", " Has ");
    s = s.Replace(" had ", " Had ");
    s = s.Replace(" is ", " Is ");
    s = s.Replace(" my ", " My ");
    s = s.Replace("   ", "  ");                // no triple spaces
    s = s.Replace("'N'", "'n'");          // Rock 'n' Roll
    s = s.Replace("'N'", "'n'");         // Rock 'n Roll
    s = s.Replace(" no ", " No ");
    s = s.Replace(" Nor ", " nor ");
    s = s.Replace(" Not ", " not ");
    s = s.Replace(" Of ", " of ");
    s = s.Replace(" Off ", " off ");
    s = s.Replace(" On ", " on ");
    s = s.Replace(" Onto ", " onto ");
    s = s.Replace(" Or ", " or ");
    s = s.Replace(" O'c ", " O'C ");
    s = s.Replace(" Over ", " over ");
    s = s.Replace(" so ", " So ");
    s = s.Replace(" To ", " to ");
    s = s.Replace(" that ", " That ");
    s = s.Replace(" this ", " This ");
    s = s.Replace(" thus ", " Thus ");
    s = s.Replace(" The ", " the ");
    s = s.Replace(" Too ", " too ");
    s = s.Replace(" when ", " When ");
    s = s.Replace(" With ", " with ");
    s = s.Replace(" Up ", " up ");
    s = s.Replace(" Yet ", " yet ");
    // a few(!) verbal expressions
    s = s.Replace(" Get up ", " Get Up ");
    s = s.Replace(" Give up ", " Give Up ");
    s = s.Replace(" Givin' up ", " Givin' Up ");
    s = s.Replace(" Grow up ", " Grow Up ");
    s = s.Replace(" Hung up ", " Hung Up ");
    s = s.Replace(" Make up ", " Make Up ");
    s = s.Replace(" Wake Me up ", " Wake Me Up ");
    s = s.Replace(" Mixed up ", " Mixed Up ");
    s = s.Replace(" Shut up ", " Shut Up ");
    s = s.Replace(" Stand up ", " Stand Up ");            
    s = s.Replace(" Wind up ", " Wind Up ");
    s = s.Replace(" Wake up ", " Wake Up ");
    s = s.Replace(" Come up ", " Come Up ");
    s = s.Replace(" Working on ", " Working On ");
    s = s.Replace(" Waiting on ", " Waiting On ");
    s = s.Replace(" Turn on ", " Turn On ");
    s = s.Replace(" Move on ", " Move On ");
    s = s.Replace(" Keep on ", " Keep On ");
    s = s.Replace(" Bring It on ", " Bring It On ");
    s = s.Replace(" Hold on ", " Hold On ");
    s = s.Replace(" Hang on ", " Hang On ");
    s = s.Replace(" Go on ", " Go On ");
    s = s.Replace(" Coming on ", " Coming On ");
    s = s.Replace(" Come on ", " Come On ");
    s = s.Replace(" Call on ", " Call On ");
    s = s.Replace(" Trust in ", " Trust In ");
    s = s.Replace(" Fell in ", " Fell In ");
    s = s.Replace(" Falling in ", " Falling In ");
    s = s.Replace(" Fall in ", " Fall In ");
    s = s.Replace(" Faith in ", " Faith In ");
    s = s.Replace(" Come in ", " Come In ");
    s = s.Replace(" Believe in ", " Believe In ");



    return s.Trim();
}

Обратите внимание, что существует еще немало правил, которые не могут быть реализованы следующим образом.

Некоторые основные правила не так сложны: заглавные буквы 1 и 3. Все глаголы ( Is ), прилагательные ( Red ), promouns ( He ), существительные ( Ace ) и числа ( Один ), даже если у них меньше 3 (или 4) букв.

Но Исключения трудны, например: Не используйте заглавные буквы предлогов, когда они являются частью или словесным выражением ...

Пример 1: «Работа над / над зданием» - Вы должны знать, что это евангельская песня, чтобы решить, что это «Вкл».

Пример 2: «Запуск вкл / выкл». Может означать «Running On» или «Running (with gas indictor)» на Empty.

Итак, в конце вам придется жить с компромиссом.

1
задан MerkisL 5 March 2019 в 11:06
поделиться

1 ответ

Существует несколько более подходящих подходов для обработки требований промежуточного программного обеспечения, которые обычно используются поверх предлагаемого вами метода:

Включайте ваше промежуточное программное обеспечение для аутентификации только в те маршруты, которые вам требуются:

const authenticationMiddleware = (req, res, next) => {
    // your login check logic
}

router.get('/api/users/me', authenticationMiddleware, (req, res, next) => {
    // your route logic, this endpoint now requires you to be logged in, as you have specified your authentication middleware in the declaration,
})

router.get('/api/profiles/:profileId', (req, res, next) => {
     // your route logic, this endpoint does not require you to be logged in as you have not put the middleware in the route delcaration
})

Или добавьте промежуточное программное обеспечение для аутентификации в зависимости от того, где называются ваши маршруты:

router.get('/api/profiles/:profileId', (req, res, next) => {
    // your route logic, this endpoint does not require you to be logged as we have not told our router to use the middleware yet
})

router.use(authenticationMiddleware)

router.get('/api/users/me', (req, res, next) => {
    // your route logic, this endpoint now requires you to be logged in, as the router has been told to use the middleware at this point.
})

Почему используются эти методы? Попробуйте и подумайте обо всех вызовах router или app, которые вы делаете, как о добавлении в стек, который Express использует для обработки вызовов на ваш сайт или API. Проходя через поиск маршрутов, он будет вызывать любое промежуточное ПО, которое он находит на своем пути.

Это решает проблему необходимости объявлять список или массив маршрутов, которые требуют или не требуют определенного фрагмента аутентификации и т. Д.

Вам также необходимо убедиться, что вызовите next() в вашем промежуточном программном обеспечении, если вы хотите, чтобы оно работало, так как это говорит Express, чтобы продолжить проходить все маршруты / промежуточное программное обеспечение, которое оно имеет.

0
ответ дан OllysCoding 5 March 2019 в 11:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: