expressjs中用于呈现手把页面的Res.render不起作用



因此,在我的客户端,我有以下javascript

search_button.addEventListener("click", event => {
fetch("/api/specific-customer/" + search_input.value).then(res => {
console.log(res.status)
})
})

然后在我的服务器端,我有以下端点

router.get("/specific-customer/:name", (req, res) => {
let target_user = req.params.name;
let sqlQuery = "SELECT * FROM Customers WHERE customer_name = ?";
mysql.pool.query(sqlQuery, [target_user], (err, result) => {
if (err) {
console.log(err);
}
else {
console.log(result)
let data = {
customer: result
}
res.render("index", data)
}
})
});

res.render根本没有呈现索引页,只是什么都不做。我目前在索引页面上,但我想用不同的数据重新呈现它,而不是默认的SELECT*FROM Products。有人有什么建议吗?

如果您的SQL查询没有返回任何错误,那么这里有几种方法可以实现您想要的。

第一种方法

  • 不要在搜索按钮点击事件中使用获取
  • 仅使用window.location.replace重定向
  • name传递到URL
search_button.addEventListener("click", event => {
window.location.replace("/api/specific-customer/" + search_input.value);
})

第二种方法

  • 如果没有target_user,这意味着我们试图在没有任何数据的情况下呈现索引页,因此我们返回res.render('index')

  • 在索引页面上,当单击搜索按钮时,我们使用fetch对同一个端点("/specific-customer/:name")进行API调用,但这次使用target_name作为URL参数。

  • 现在,因为我们正在传递target_name,所以它不再传递res.render(),而是以JSON的形式返回SQL查询的结果。

  • 最后,使用您获得的数据来填充页面。

router.get("/specific-customer/:name", (req, res) => {
let target_user = req.params.name;
if (!target_user) {
return res.render('index')
}
let sqlQuery = "SELECT * FROM Customers WHERE customer_name = ?";
mysql.pool.query(sqlQuery, [target_user], (err, result) => {
if (err) {
console.log(err);
res.json(err)
} else {
console.log(result)
let data = {
customer: result
}
res.json(data)
}
})

});

最新更新