You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React前端搭配Node+Express后端:实现SQL数据查询及ID搜索展示功能

解决方案:React + Node/Express + SQL 实现数据展示与ID搜索

一、后端(Node.js + Express + SQL)

1. 依赖安装

先安装核心依赖包:

npm install express mysql2 cors

2. 数据库连接与路由实现

创建server.js,完成数据库配置与接口编写(以MySQL为例,其他SQL数据库可替换对应驱动):

const express = require('express');
const mysql = require('mysql2');
const cors = require('cors');
const app = express();
const port = 5000;

// 数据库连接配置(替换为你的实际信息)
const db = mysql.createConnection({
  host: 'localhost',
  user: 'your_db_username',
  password: 'your_db_password',
  database: 'your_db_name'
});

// 建立数据库连接
db.connect((err) => {
  if (err) throw err;
  console.log('已连接到SQL数据库');
});

// 启用跨域与JSON解析
app.use(cors());
app.use(express.json());

// 接口1:获取全量数据
app.get('/api/data', (req, res) => {
  const query = 'SELECT * FROM your_table_name';
  db.query(query, (err, results) => {
    if (err) {
      res.status(500).json({ error: err.message });
      return;
    }
    res.json(results);
  });
});

// 接口2:根据ID查询单条记录
app.get('/api/data/:id', (req, res) => {
  const { id } = req.params;
  const query = 'SELECT * FROM your_table_name WHERE id = ?';
  db.query(query, [id], (err, results) => {
    if (err) {
      res.status(500).json({ error: err.message });
      return;
    }
    if (results.length === 0) {
      res.status(404).json({ message: '该ID不存在' });
      return;
    }
    res.json(results[0]);
  });
});

// 启动服务器
app.listen(port, () => {
  console.log(`服务器运行在端口 ${port}`);
});

二、前端(React)

1. 依赖安装

安装表格组件(以react-data-grid为例,也可替换为你习惯的Grid库):

npm install react-data-grid

2. 核心组件实现

创建DataGridView.js,实现数据加载与ID搜索功能:

import React, { useState } from 'react';
import DataGrid from 'react-data-grid';

const DataGridView = () => {
  const [tableData, setTableData] = useState([]);
  const [searchId, setSearchId] = useState('');
  const [isLoading, setIsLoading] = useState(false);
  const [errorMsg, setErrorMsg] = useState('');

  // 表格列配置(替换为你的数据库表字段)
  const columns = [
    { key: 'id', name: 'ID' },
    { key: 'name', name: '名称' },
    { key: 'email', name: '邮箱' },
    // 按需添加其他字段
  ];

  // 加载全量数据
  const loadAllData = async () => {
    setIsLoading(true);
    setErrorMsg('');
    try {
      const res = await fetch('http://localhost:5000/api/data');
      if (!res.ok) throw new Error('数据加载失败');
      const data = await res.json();
      setTableData(data);
    } catch (err) {
      setErrorMsg(err.message);
    } finally {
      setIsLoading(false);
    }
  };

  // 根据ID搜索数据
  const searchById = async () => {
    if (!searchId.trim()) {
      setErrorMsg('请输入有效ID');
      return;
    }
    setIsLoading(true);
    setErrorMsg('');
    try {
      const res = await fetch(`http://localhost:5000/api/data/${searchId}`);
      if (res.status === 404) {
        setErrorMsg('该ID不存在于数据库中');
        setTableData([]);
        return;
      }
      if (!res.ok) throw new Error('搜索请求失败');
      const data = await res.json();
      setTableData([data]); // 用数组包裹适配表格组件
    } catch (err) {
      setErrorMsg(err.message);
    } finally {
      setIsLoading(false);
    }
  };

  return (
    <div style={{ padding: '2rem' }}>
      <div style={{ marginBottom: '1.5rem' }}>
        <button onClick={loadAllData} disabled={isLoading}>
          {isLoading ? '加载中...' : '获取全部数据'}
        </button>
        <div style={{ marginLeft: '1rem', display: 'inline-block' }}>
          <input
            type="text"
            placeholder="输入ID搜索"
            value={searchId}
            onChange={(e) => setSearchId(e.target.value)}
            disabled={isLoading}
            style={{ marginRight: '0.5rem' }}
          />
          <button onClick={searchById} disabled={isLoading}>
            {isLoading ? '搜索中...' : '搜索'}
          </button>
        </div>
      </div>
      {errorMsg && <p style={{ color: '#dc2626', marginBottom: '1rem' }}>{errorMsg}</p>}
      <DataGrid columns={columns} rows={tableData} />
    </div>
  );
};

export default DataGridView;

3. 在主应用中引入组件

修改App.js:

import DataGridView from './DataGridView';

function App() {
  return (
    <div className="App">
      <h1 style={{ textAlign: 'center', margin: '2rem 0' }}>数据管理面板</h1>
      <DataGridView />
    </div>
  );
}

export default App;

关键注意事项

  • 替换代码中所有占位信息(数据库配置、表名、字段等)为你的实际业务数据
  • 生产环境建议使用dotenv管理敏感配置(如数据库密码),避免硬编码
  • 可根据需求扩展输入验证、加载状态样式、空数据提示等UI优化

内容的提问来源于stack exchange,提问作者mayank tripathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:35:54