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