Экспресс — получение значения строки соответствия пути

#node.js #express

#node.js #выразить

Вопрос:

Вопрос

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

 const express = require('express')
const app = express()
const router1 = express.Router()
const router2 = express.Router()

// set up router 2 paths
router2.get('/path2/:param2', (req, res, next) => {
  const someVar = req.something // the value I'll talk about in a second
  return res.status(200).send({ someVar })
})

// set up router1 paths
router1.use('/path1/:param1', router2)

// connect the routers behind a base url
app.use('/api/v1', router1)

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})
  

Если бы я должен был сделать запрос GET с:

 curl -X GET http://localhost:3000/api/v1/path1/myparam1/path2/myparam2
  

Я хочу, чтобы это возвращало объект, подобный этому:

 {
  "someVar": "/api/v1/path1/:param1/path2/:param2"
}
  

Контекст

В моем приложении есть промежуточное программное обеспечение, которое регистрирует путь к кластеру elasticsearch, и я бы хотел, чтобы кластер группировал пути по строке, которую они использовали для соответствия запросу, а не по самому запросу. Таким образом, я могу получить визуальное представление о том, какие конечные точки запроса подвергаются наибольшему удару.

Ответ №1:

 // you need to set mergeParams: true on the router,
// if you want to access params from the parent router
var router1 = express.Router({mergeParams: true});
  

Комментарии:

1. Хорошо! Это отличный ответ на часть вопроса. Что бы я тогда зарегистрировал, если бы захотел получить доступ к строке соответствия параметров? например /path1/:param1 ?

2. вы можете получить исходный URL-адрес, используя «req.url»

3. Таким образом, в этом случае, если я реализую mergeParams опцию, req.url будет возвращено /api/v1/path1/myparam1/path2/myparam2 то значение, которое я хочу, чтобы значение, используемое в express, соответствовало пути, /api/v1/path1/:param1/path2/:param2 . Есть ли способ получить это без добавления специализированного промежуточного программного обеспечения?

4. Параметры слияния ни в одном специализированном промежуточном программном обеспечении .. вы можете использовать «req.url», чтобы получить полный путь запроса, а параметр параметров слияния — сохранить значения параметров запроса от родительского маршрутизатора.