Не удается ПОЛУЧИТЬ (переданный URL в качестве параметра)

#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>);
  

В обоих приведенных выше маршрутах ? означает параметр, для которого маршрутизируется рабочий файл

и в вашей функции вы можете добавить протокол в url, например

 function newUrl(req, res) {
    if(req.params.protocol)
        req.params.url = req.params.protocol   '//'   req.params.url;
    console.log(req.params.url);
}