单击按钮将参数传递给Express控制器

时间:2018-11-20 15:28:00

标签: javascript node.js express web-applications

前言:我正在使用Node.js,Express和MongoDB编写Web应用程序。

单击按钮时,我试图通过URL从我的index.ejs到Express控制器ItemController.js传递参数,以便动态创建一组过滤的数据。

该按钮在index.ejs中的定义如下:

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

在包含各种功能的外部Javascript文件中,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抓取参数,但是该参数作为未定义返回。我也尝试了以下链接中的技术,但均无济于事。我应该怎么做才能做到这一点?有没有更好的方法可以解决这个问题?

以前尝试过

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

How to access the GET parameters after "?" in Express?

1 个答案:

答案 0 :(得分:0)

$('#mainContent').load(page);

您请求的网址存储在page变量中。

loadItems(page, subcategory)

…定义为参数

onclick="loadItems(value, 'Scripting Languages')"
从onclick事件处理程序传递的

value="/items/items"

…从该属性获取它的值。


由于您所请求的URL不包含查询字符串,所以查询字符串未显示!

您拥有的唯一查询字符串来自此处:

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

…修改浏览器地址栏中的URL和历史记录,而无需实际请求。