2014-01-10 3 views
0

Мне нужно извлечь значение токена доступа из следующего URL-адреса.Извлечь значение из URL-адреса

http://localhost:4001/app1/#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj 

Как я могу получить полный URL-адрес и получить значение access_token, используя connect в node.js? Я попытался использовать req.url и req.query, чтобы получить полный URL.

+0

Возможный дубликат [Node.js: прочитать параметры, переданные по URL-адресу] (http://stackoverflow.com/questions/7398264/node-js-read-params-passed-in-the-url) – vittore

+0

@vittore Я уже проверил вышеуказанную ссылку, связанную с выборкой параметров запроса. Но мой вопрос: «#access_token» – user3180402

+0

Кажется странным, что access_token передается таким образом. Есть ли причина, по которой он не может быть передан как стандартный параметр URL? – pgreen2

ответ

0

Часть URL-адреса, которая начинается с #, называется fragment identifier или хэшем. Разбор URL даст хэш.

Если req.url возвращает 'http://localhost:4001/app1/#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj', то require('url').parse(req.url) возвращает

{ protocol: 'http:', 
    slashes: true, 
    auth: null, 
    host: 'localhost:4001', 
    port: '4001', 
    hostname: 'localhost', 
    hash: '#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj', 
    search: null, 
    query: null, 
    pathname: '/app1/', 
    path: '/app1/', 
    href: 'http://localhost:4001/app1/#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj' } 

Так что часть вы ищете в hash свойство разобранного URL: require('url').parse(req.url).hash

+0

Что я делаю неправильно здесь.hash значение равно null.
router.get ('/ app1', function (req, res, next) { var fullURL = require ('url'). Parse (req.url) console.log (fullURL) }); – user3180402

+0

Можете ли вы разместить больше своего кода? Я мог бы создать свой собственный, но он может быть совершенно другим. – pgreen2

+0

router.get ('/ app1', function (req, res, next) { var req_url = require ('url'). Parse (req.url) console.log (req_url); }); Выход {протокол: Null, косые: нуль, аутентификации: нуль, хоста: нуль, порт: нуль, имя хоста: нуль, хэш: нуль, поиск: нуль, запрос: нуль, путь к файлу : '/ app1 /', путь: '/ app1 /', href: '/ app1 /'} – user3180402

1

Update:

http-клиент удаляет # f суждения URL-адреса до того, как он запрашивает сервер для этой страницы, поэтому сервер никогда не имеет к нему доступа, это , доступный только браузеру.


Когда агент (браузер) запрашивает ресурс с сервера, агент отправляет только URI на сервере (не фрагмент). Вместо этого агент ожидает, что сервер отправит ответ, тогда агент обрабатывает ресурс в соответствии с типом документа и значением фрагмента. [source & для получения дополнительной информации здесь является link]

Итак, если у вас возникли какие-либо данные в фрагменте, то это до вас, чтобы обработать эти данные (AJAX)


Вы можете думать, чтобы захватить хэш на клиенте JavaScript ( window.location.hash) и отправить его на обслуживание. В этом случае вы получите строку, как это, вот пример:

var req_url = 'http://localhost:4001/app1/#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj'; 
HashKeyValueParsed_JSON = {}; 
require('url').parse(req_url).hash.substring(1).split('&').forEach(function (x) { 
    var arr = x.split('='); 
    arr[1] && (HashKeyValueParsed_JSON[arr[0]] = arr[1]); 
}); 
console.log(HashKeyValueParsed_JSON); //Output JSON: { access_token: 'FH2yCAcgmPjMOtKcp3DE', refresh_token: 'pjgTyaj' } 

Вы получите выход:

{ access_token: 'FH2yCAcgmPjMOtKcp3DE', 
    refresh_token: 'pjgTyaj' } 

Я рекомендую вам держать все ваши требуют из цикла или какая-либо функция, потому что это блокирующий вызов в Node.js (хотя он использует кеш [здесь есть источник link]). Для получения дополнительной информации вы можете прочитать это answer.

+1

req.url дает вывод/app1 /. Как получить полный URL? – user3180402

+0

Yup, я проигнорировал эту часть. Мой плохой .. Обновил мой ответ соответственно. –

1

Согласно nodejs url with hash, хэш-часть URL-адреса НЕ отправляется на сервер. Попробуйте отправить запрос access_token.

Смежные вопросы