【问题标题】:Res.render in expressjs for rendering handlebars page is not working用于渲染车把页面的 expressjs 中的 Res.render 不起作用
【发布时间】:2021-05-17 06:40:14
【问题描述】:

所以在我的客户端,我有以下 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 重新呈现它。有人有什么建议吗?

【问题讨论】:

标签: javascript node.js express http handlebars.js


【解决方案1】:

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

第一种方法

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(),而是将SQL查询的结果作为JSON返回。

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

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)
        }
    })
  
});

【讨论】:

  • fetch 也可用于获取动态模板(参考:gomakethings.com/getting-html-with-fetch-in-vanilla-js/…)。所以问题不在于fetch 它在服务器上。
  • 没错,但这似乎是一个服务器端渲染的应用程序,所以当您可以通过替换窗口位置 URL 来发出请求时,为什么要使用fetch 发出 get 请求。不确定我是否完全理解您的观点@MuhammadSaquibShaikh
  • 假设您想在页面中加载一些 html 代码,因为您不想重新加载而不是重新加载,您可以从服务器中提取该代码并在那里注入。在这种情况下,可以使用 fetch 来获取动态内容。
  • 我认为他没有正确配置他的快递应用,请他阅读这篇文章google.com/amp/s/www.geeksforgeeks.org/…
猜你喜欢
  • 2014-04-07
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2015-05-01
  • 2015-01-30
相关资源
最近更新 更多