繁体   English   中英

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

[英]Pass parameter to Express controller from button click

前言:我正在使用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抓取参数,但是它以未定义的形式返回。 我也尝试了以下链接中的技术,但均无济于事。 我应该怎么做才能做到这一点? 有没有更好的方法来解决这个问题?

以前尝试过

如何在Node.js上的Express.js中获取GET(查询字符串)变量?

如何在“?”之后访问GET参数? 在快递?

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

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

 loadItems(page, subcategory) 

…定义为参数

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

…是从onclick事件处理程序传递的

 value="/items/items" 

…从该属性获取值。


该查询字符串未显示,因为您请求的URL不包含查询字符串!

您拥有的唯一查询字符串来自以下位置:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM