2015-05-28 4 views
0

я понял, как мы разобрать параметры URL-адреса в скоростных трассах, как в примереКак добавить параметры URL? (EJS + Node + Express)

How to get GET (query string) variables in Express.js on Node.js?

Но где параметры URL приходят из в первую очередь?

EDIT:

Видимо, я могу построить такой запрос с JQuery (т.е. $.get). Я могу добавить params к этому объекту запроса. Это здорово, но все же я пытаюсь понять, как мы достигаем этого в запросе, который отображает страницу в целом.

Пример: когда я выбираю старую вкладку ниже, как это SO добавить ?answertab=oldest к URL, так что становится:

https://stackoverflow.com/questions/30516497/how-do-we-add-url-parameters-ejs-node-express?answertab=oldest#tab-top

+0

Вы имеете в виду, как добавить параметры запроса в браузере или как добавить его в узел, чтобы запросить информацию с других серверов? Они почти, но не совсем то же самое. У браузера есть дополнительная сложность того, откуда берутся данные, которые вы хотите передать в качестве параметра запроса. – slebetman

+0

@slebetman отредактировал вопрос с примера, я думаю, теперь он яснее. Благодаря! –

+1

Для примера SO, о котором вы спрашиваете, ответ прост. Полная строка просто включает ''? Answertab = oldest''. Другими словами, вкладка выглядит примерно так в исходном файле: 'oldest'. В этом нет ничего особенного. Это просто строка – slebetman

ответ

1

Автор страницы пишет их так. Вот как они «приходят на первое место». Авторы HTML-страницы решают (или рассказывают разработчики веб-сайта), где взять пользователя, когда он нажимает на определенный элемент привязки на нем. Если пользователи хотят GET страницу с некоторыми параметрами запроса (которые обрабатывает их сервер), они просто добавляют строку запроса по своему выбору к атрибуту href ссылки.

Посмотрите на атрибут вкладки старейшей вы щелкнули href:

<a 
class="youarehere" 
href="https://stackoverflow.com/questions/30516497/how-do-we-add-url-parameters-ejs-node-express?answertab=oldest#tab-top" 
title="Answers in the order they were provided" 
> 
oldest 
</a> 

Когда щелкнул, браузер просто взял вас на путь, указанный в href атрибута /questions/30516497/how-do-we-add-url-parameters-ejs-node-express?answertab=oldest#tab-top относительно базового URL http://stackoverflow.com. Таким образом, адресная строка изменилась.

stackoverflow.com может иметь собственную систему генерации динамических HTML-страниц. Их администраторы и авторы страниц настроили свой сервер для обработки определенных параметров запроса и внедрили свои собственные методы, чтобы убедиться, что ссылки на их страницах указывают на URL (включая строку запроса), которые они желают.

Вам необходимо предоставить URI с строками запросов по вашему выбору (их можно использовать с помощью url.format и querystring.stringify) в вашу систему шаблонов для рендеринга. Затем сделайте ваши экспресс-маршруты обработайте их и создайте страницы в зависимости от их стоимости.

3

строка, которую вы смотрите на это сериализации значений формы или какого-либо другого такого метода ввода данных. Чтобы понять это, взгляните на jQuery's built in .serialize() method.

Вы также можете построить эту строку вручную, и это тоже довольно прямолинейно. Формат просто ?var1=data1&var2=data2 и т.д. Если у вас есть объект JSON {"name": "Tim", "age": 22}, то вы могли бы написать очень простую функцию для сериализации этого объекта:

function serializeObject(obj) { 
    var str = "?"; 
    for(var i = 0; i < Object.keys(obj).length; i++) { 
     key = Object.keys(obj)[i]; 
     if (i === Object.keys(obj).length - 1) 
      str += encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]); 
     else 
      str += encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]) + "&"; 
    } 
    return str; 
} 

Запуск seralizeObject({"name": "Tim", "age": 22}) выведет на экран '?name=Tim&age=22'. Это может быть использовано для создания ссылки или еще чего-то.

+0

спасибо, очень полезно! :) – ghuroo

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