Передача параметра в экспресс-контроллер от нажатия кнопки - PullRequest
0 голосов
/ 20 ноября 2018

Предисловие: я пишу веб-приложение с использованием Node.js, Express и MongoDB.

При нажатии кнопки я пытаюсь передать параметр через URL из моего index.ejs в контроллер ExpressItemController.js для динамического создания отфильтрованного набора данных.

Кнопка определяется в index.ejs следующим образом:

<button type="button" class="btn btn-primary" value="/items/items" onclick="loadItems(value, 'Scripting Languages')">
      Scripting Languages
</button>

В моем внешнем файле Javascripts, который содержит различные функции,loadItems выполняет следующее:

function loadItems(page, subcategory) {
    window.history.replaceState({}, '', "?subcat=" + subcategory); //set URL Param
    $('#mainContent').load(page); //load item listing page into grid within HTML GridLayout
}

После этого маршрутизатор / контроллер обрабатывает фильтрацию данных и рендеринг страницы:

Маршрутизатор (item.js)

...
// Get all items
router.get('/items', item.items);
...

Контроллер (ItemController.js)

...
  // loads item listings
  itemController.items = function(req, res) {
    Item.find({}).exec(function (err, items) {
      if (err) {
        console.log("Error:", err);
      }
      else {
        var URLSubcat = "Scripting Languages"; //this variable needs to change
        var filtered = items.filter(function(el) {
          return el.subcategory === URLSubcat;
        });
        res.render("../views/items/items", {items: filtered});
      }
    });
  };
...

Я пытался использовать req.query.subcat, чтобы попытаться получить параметр из URL, однако онвозвращается как неопределенный.Я также попробовал методы в ссылках ниже безрезультатно.Что я должен сделать, чтобы достичь этого?Есть ли лучший способ сделать это?

Ранее пробовал

Как получить переменные GET (строка запроса) в Express.js на Node.js?

Как получить доступ к параметрам GET после "?"в экспрессе?

1 Ответ

0 голосов
/ 20 ноября 2018
$('#mainContent').load(page);

Запрашиваемый вами URL-адрес хранится в переменной page.

loadItems(page, subcategory)

… которая определяется как аргумент

onclick="loadItems(value, 'Scripting Languages')"

… который передается из обработчика события onclick

value="/items/items"

… который получает значение из этого атрибута.


Строка запроса не отображается, поскольку запрашиваемый URL-адрес не содержит строку запроса!

Единственная строка запроса, которую вы получили, находится здесь:

 window.history.replaceState({}, '', "?subcat=" + subcategory); 

… который изменяет URL-адрес в адресной строке браузера и истории, фактически не запрашивая его.

...