#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», чтобы получить полный путь запроса, а параметр параметров слияния — сохранить значения параметров запроса от родительского маршрутизатора.