Regex, используемый в Express JS Middleware, не передает параметры URL - PullRequest
0 голосов
/ 04 марта 2020

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

/\/notebook\/\w+\/(?!delete|save|entry)\w+/

Регулярное выражение, насколько я тестировал, работает как положено ( приведенная ниже демонстрация скопирована с консоли):

 /\/notebook\/\w+\/(?!delete|save|entry)\w+/.test("/notebook/5e5f8bcf0f3ec87973a7e2a5/5e5f8bcf0f3ec87973a7e2a6?id=5e5f8bcf0f3ec87973a7e2a4")
true

Однако параметры конечной точки не передаются в промежуточное ПО:

   console.log app/routes/notebook.ts:71
   Params: {} Original URL: /notebook/5e5f8f85562da17d3088ddaa/5e5f8f85562da17d3088ddab?id=5e5f8f85562da17d3088dda9

● Notebook entry can be accessed

Failed: Object {
  "detail": "Regex matched path for /notebook/:notebookId/:entryId, but the entry id undefined cannot be found",
  "status": 500,
  "title": "Serverside error",
  "type": "generic-001",
}

  319 | 
  320 |                 if (res.status !== 200) {
> 321 |                   fail(res.body);
      |                   ^
  322 |                 }
  323 | 
  324 |                 expect(res.status).toBe(200);

Строка 321

Я предполагаю, что это потому, что express не связывает запрошенную конечную точку 1017 * с промежуточным программным обеспечением, однако я не уверен относительно того, как это не связано, поскольку промежуточное программное обеспечение выполняется по запросу , и я могу получить все другие переменные в, такие как id в разделе запроса url и originalUrl, но не параметры url.

Как это исправить?

1 Ответ

0 голосов
/ 04 марта 2020

Express извлекает объект params из URL на основе записи :. Таким образом, если ваше регулярное выражение на самом деле не имеет обозначения, оно не будет извлекать эти шаблоны и служить им в качестве объектов. Он находит посредник, но не анализирует объект.

Попробуйте что-то вроде /\/notebook\/:notebookid\/:entryid?\w+\/(?!delete|save|entry)\w+/.

Кроме того, я думаю, что ваш код может немного запутаться в URL, которые не t использовать entryid, например /notebook/:notebookId (строка 163).

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