前言:我正在使用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?
答案 0 :(得分:0)
$('#mainContent').load(page);
您请求的网址存储在page
变量中。
loadItems(page, subcategory)
…定义为参数
从onclick事件处理程序传递的onclick="loadItems(value, 'Scripting Languages')"
…
value="/items/items"
…从该属性获取它的值。
由于您所请求的URL不包含查询字符串,所以查询字符串未显示!
您拥有的唯一查询字符串来自此处:
window.history.replaceState({}, '', "?subcat=" + subcategory);
…修改浏览器地址栏中的URL和历史记录,而无需实际请求。