#node.js #express
#node.js #выразить
Вопрос:
Могут ли маршруты в express не принимать полный URL в качестве параметра?
Например,
router.get("/new/:url", <some function>);
выдает мне ошибку Cannot GET, когда:url https://www.google.com
Ответ №1:
Вы не можете получить полный
URL
файл в таком формате.Этот тип формата используется для приема параметров, отправляемых клиентом
router.get("/new/:url", <some function>);
//you can get url as params
req.params.url//Use your URL
Комментарии:
1. URL — ЭТО параметр, отправляемый клиентом
2. да, предполагается, что в качестве параметра вы можете использовать этот параметр, но не можете использовать его как полный URL в текущем маршруте
Ответ №2:
Вы должны закодировать параметр url перед отправкой. Ваш пример, закодированный, будет Http://www.google.com . На стороне сервера вы можете декодировать параметр, чтобы получить значение из предыдущего.
Ответ №3:
Я думаю, вы не очень осведомлены о маршрутизации ExpressJS, потому что ваш url https://www.google.com у //
которого используется разделение маршрутов.
В вашем случае мы знаем, что ExpressJS поддерживает маршрут регулярных выражений. Я думаю, что следующее регулярное выражение будет работать для вас
app.get("/new/:protocol(http:|https:|ftp:)?/?/:url", <some function>);
В приведенном выше случае вы подключились к ограниченным протоколам http, https и ftp. Вы можете добавить больше протокола, используя |
разделитель (или условие), и даже если вы не знаете, какой будет протокол, тогда вам нравится следующее
app.get("/new/:protocol?/?/:url", <some function>);
В обоих приведенных выше маршрутах ?
означает параметр, для которого маршрутизируется рабочий файл
- /new/www.google.com
- /new/https: //www.google.com
и в вашей функции вы можете добавить протокол в url, например
function newUrl(req, res) {
if(req.params.protocol)
req.params.url = req.params.protocol '//' req.params.url;
console.log(req.params.url);
}