【问题标题】:Pass parameter to Express controller from button click通过按钮单击将参数传递给 Express 控制器
【发布时间】:2018-11-20 15:27:59
【问题描述】:

前言:我正在使用 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>

在我的包含杂项函数的外部 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 中获取参数,但它返回为未定义。我也尝试了以下链接中的技术,但无济于事。我应该怎么做才能做到这一点?有没有更好的方法来解决这个问题?

以前尝试过

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

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

【问题讨论】:

    标签: javascript node.js express web-applications


    【解决方案1】:
    $('#mainContent').load(page);
    

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

    loadItems(page, subcategory)
    

    …它被定义为一个参数

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

    …从 onclick 事件处理程序传递过来

    value="/items/items"
    

    ...从该属性中获取值。


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

    您拥有的唯一查询字符串来自这里:

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

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

    【讨论】:

    • 天哪,你完全正确!我忘了replaceState 只更改地址栏中的 URL,而不是请求本身……好的,太好了!因此,既然是这种情况,我将不得不将按钮值更改为 value="/items/items?subcat=Scripting Languages"?
    • 经过并将value更改为上述评论,现在一切正常。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2018-01-17
    • 2014-03-26
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多