.js,数据库使用MySQL。

以下是一个简单的历史订单页面代码样例,通过node.js和MySQL进行数据查询和分页显示:

const express = require('express');
const mysql = require('mysql');

const app = express();
app.set('view engine', 'ejs');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'example'
});

app.get('/orders', (req, res) => {
  const pageNum = req.query.page || 1;
  const pageSize = 10;
  const offset = (pageNum - 1) * pageSize;

  const query = `SELECT * FROM orders ORDER BY order_date DESC LIMIT ${offset}, ${pageSize}`;
  connection.query(query, (error, results, fields) => {
    if (error) {
      console.error(error);
      res.status(500).send('Internal Server Error');
    } else {
      const countQuery = 'SELECT COUNT(*) AS count FROM orders';
      connection.query(countQuery, (countError, countResults, countFields) => {
        if (countError) {
          console.error(countError);
          res.status(500).send('Internal Server Error');
        } else {
          const totalCount = countResults[0].count;
          const totalPages = Math.ceil(totalCount / pageSize);
          const prevPage = pageNum > 1 ? pageNum - 1 : 1;
          const nextPage = pageNum < totalPages ? pageNum + 1 : totalPages;
          const startPage = pageNum > 2 ? pageNum - 2 : 1;
          const endPage = Math.min(startPage + 4, totalPages);

          res.render('orders', { 
            results, 
            pageNum, 
            totalPages, 
            prevPage, 
            nextPage, 
            startPage, 
            endPage 
          });
        }
      });
    }
  });
});

app.listen(3000, () => console.log('Server started on port 3000'));

在这个样例中,我们首先定义了一个Express应用程序,然后创建了一个MySQL连接。我们定义了一个路由处理程序,用于处理历史订单页面的请求。在这个路由处理程序中,我们首先从查询字符串中获取当前页码和每页显示的条目数,然后计算出偏移量,以便在MySQL中进行分页查询。

我们使用ORDER BY子句按订单日期降序对结果进行排序,然后使用LIMIT子句限制结果集的大小。我们还使用COUNT(*)计算总订单数,以便在分页时使用。

我们计算出总页数,以及前一页和后一页的页码。我们还计算出应该显示的相邻3个页面的起始和结束页码。最后,我们使用EJS模板引擎渲染orders.ejs模板,并将结果,页码和分页信息作为变量传递给模板。

以下是orders.ejs模板的示例代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>历史订单</title>
</head>
<body>
  <h1>历史订单</h1>
  <table>
    <thead>
      <tr>
        <th>订单号</th>
        <th>订单日期</th>
        <th>客户名称</th>
        <th>订单金额</th>
      </tr>
    </thead>
    <tbody>
      <% results.forEach(order => { %>
        <tr>
          <td><%= order.order_id %></td>
          <td><%= order.order_date.toISOString().substr(0, 10) %></td>
          <td><%= order.customer_name %></td>
          <td><%= order.order_amount.toFixed(2) %></td>
        </tr>
      <% }); %>
    </tbody>
  </table>
  <nav>
    <% if (pageNum > 1) { %>
      <a href="/orders?page=<%= prevPage %>">上一页</a>
    <% } %>
    <% for (let i = startPage; i <= endPage; i++) { %>
      <% if (i === pageNum) { %>
        <strong><%= i %></strong>
      <% } else { %>
        <a href="/orders?page=<%= i %>"><%= i %></a>
      <% } %>
    <% } %>
    <% if (pageNum < totalPages) { %>
      <a href="/orders?page=<%= nextPage %>">下一页</a>
    <% } %>
  </nav>
</body>
</html>

在orders.ejs模板中,我们首先按表格格式显示订单数据。然后,我们在底部添加一个导航栏,用于显示分页按钮。我们使用条件语句显示或隐藏上一页和下一页按钮。我们使用循环语句显示相邻的3个页面按钮,并使用条件语句突出显示当前页。最后,我们将所有这些内容呈现给用户。

这个样例只是一个简单的历史订单页面代码,您可以根据自己的需求进行修改和扩展。


原文地址: https://www.cveoy.top/t/topic/ba9k 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录