如何使用node.js

时间:2019-03-18 19:28:12

标签: javascript html node.js

我目前正在使用node.js创建一个网页,该网页对MySQL数据库进行查询并在表格中显示结果。

我希望页面在初次加载时显示数据库中的所有数据,但我也想实现一个过滤器,用户可以在其中填写一些字段,并且当按下“提交”按钮时,将使用进行新查询输入和结果显示在页面上。

这是我到目前为止的代码:

在“ app.js”中,我连接到数据库并将其呈现到页面:

var connection = mysql.createConnection({
    // make connection
    host: ...,
    user: ...,
    password: ...,
    database: ...
});

connection.connect();

//routes
app.get("/", function(req, res){

    var cmd = `SELECT * FROM myTable`;
    connection.query(cmd, function(err, result, fields) {
        if (err) throw err;
        res.render('home', {result: result});
    });
});

在home.ejs中,我遍历结果中的每个条目以在表中创建一行:

<table>
    <tr>
        <th> ... </th>
        .
        .
        .
    </tr>
    <% result.forEach(function(entry) { %>
    <tr>
        <td><%= entry.column1 %></td>
        .
        .
        .
    </tr>
    <% }) %>
</table>

因此,第一部分似乎正在工作(在初始加载时显示数据库中的所有数据),但是由于我没有任何Web开发经验,因此我正在努力进行第二部分。

我目前在页面中有一个接受用户输入的内容,并且与表单相关联。但是,我不确定如何使用myFunction()中的用户输入对数据库执行另一个查询,以及如何用新查询的结果替换表的当前内容。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

好吧,所以您要做的是对视图中已有的数据进行客户端过滤。

问题在于该表是在服务器端呈现的,那么在初始加载后如何在客户端更改数据?

解决方案:将数据设置为窗口上的字符串/渲染时为全局

<table id="results-table">
    <tr>
        <th> ... </th>
        .
        .
        .
    </tr>
    <% result.forEach(function(entry) { %>
    <tr>
        <td><%= entry.column1 %></td>
        .
        .
        .
    </tr>
    <% }) %>
</table>
<script>
  window.results = results;
</script>

之后,在模板中创建一个搜索框并提交按钮:

<input type="search" id="filter-searchbar"/>
<button id="filter-submit-btn"> submit</button>

让我们添加一个事件以侦听搜索,并添加一个处理程序以过滤出数据:

const filterSearchBar = document.querySelector('#filter-searchbar');
const filterSubmitBtn = document.querySelector('#filter-submit-btn');

filterSubmitBtn.addEventListener('click', () => {
  // Next step.
})

让我们从用户的搜索输入中过滤window.results

const filterSearchBar = document.querySelector('#filter-searchbar');
const filterSubmitBtn = document.querySelector('#filter-submit-btn');

filterSubmitBtn.addEventListener('click', () => {
  const filteredResults = window.results.filter(result => {
    // Not sure what you wanna filter by but imagine that it's by a property name.
    return result.name === filterSearchBar.value;
  });
  // Final step
});

最后一步是将数据客户端重新呈现在表模板上:

const filterSearchBar = document.querySelector('#filter-searchbar');
const filterSubmitBtn = document.querySelector('#filter-submit-btn');

filterSubmitBtn.addEventListener('click', () => {
  const filteredResults = window.results.filter(result => {
    // Not sure what you wanna filter by but imagine that it's by a property name.
    return result.name === filterSearchBar.value;
  });
  const resultsTable = document.querySelector('#results-table');
  results.innerHTML = `<pre>${JSON.stringify(resultsTable)}</pre>`

});

希望您了解我使用JSON.stringify只是向您显示输出已被过滤。此时,您需要做自己的表模板。