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

如何实现React前端与SQL Server通信?自建服务方案咨询

自行编写API实现React从SQL Server取数据的方案

核心问题:能不能用Node.js?

当然可以,Node.js是非常合适的选择——它生态成熟,有官方维护的SQL Server驱动,搭配Express这类轻量框架能快速搭建API,和React前端的配合也十分顺畅。

具体实现步骤(以Node.js + Express为例)

1. 初始化项目并安装依赖

先创建Node.js项目,安装所需的包:

npm init -y
npm install express mssql cors
  • express:用来搭建API服务器
  • mssql:Node.js官方的SQL Server驱动
  • cors:解决React前端和API服务器的跨域问题

2. 编写API接口

创建一个server.js文件,编写数据库连接和数据接口:

const express = require('express');
const sql = require('mssql');
const cors = require('cors');
const app = express();

// 允许跨域请求
app.use(cors());
// 解析JSON格式的请求体
app.use(express.json());

// SQL Server连接配置,按需修改
const dbConfig = {
  user: '你的数据库用户名',
  password: '你的数据库密码',
  server: 'localhost', // 数据库服务器地址,远程的话填对应IP/域名
  database: '你的目标数据库名',
  options: {
    encrypt: false, // 本地SQL Server一般关闭,Azure SQL需要开启
    trustServerCertificate: true // 本地测试可开启,跳过证书验证
  }
};

// 定义获取数据的接口
app.get('/api/get-data', async (req, res) => {
  try {
    // 建立数据库连接
    await sql.connect(dbConfig);
    // 执行查询语句,替换成你的表和字段
    const queryResult = await sql.query('SELECT id, name, content FROM your_table');
    // 返回查询到的数据
    res.json(queryResult.recordset);
  } catch (err) {
    console.error('数据库操作出错:', err);
    // 返回友好的错误信息,不要泄露数据库细节
    res.status(500).json({ message: '获取数据失败,请稍后重试' });
  } finally {
    // 关闭数据库连接
    await sql.close();
  }
});

// 启动服务器,监听5000端口
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
  console.log(`API服务器运行在 http://localhost:${PORT}`);
});

3. React前端调用API

在React组件里用fetch或者axios调用接口获取数据:

import { useEffect, useState } from 'react';

function DataList() {
  const [data, setData] = useState([]);
  const [loading, setLoading] = useState(true);
  const [errorMsg, setErrorMsg] = useState('');

  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await fetch('http://localhost:5000/api/get-data');
        if (!response.ok) throw new Error('请求失败');
        const result = await response.json();
        setData(result);
      } catch (err) {
        setErrorMsg(err.message);
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, []);

  if (loading) return <div>加载中...</div>;
  if (errorMsg) return <div className="error">错误:{errorMsg}</div>;

  return (
    <ul>
      {data.map(item => (
        <li key={item.id}>
          <h3>{item.name}</h3>
          <p>{item.content}</p>
        </li>
      ))}
    </ul>
  );
}

export default DataList;

其他可选编程语言

如果不想用Node.js,也可以选这些方案:

  • Python + FastAPI/Flask:用pyodbc库连接SQL Server,轻量易上手,适合有Python经验的开发者
  • C# + ASP.NET Core:和SQL Server原生集成度极高,适合.NET技术栈的项目
  • Java + Spring Boot:企业级稳定方案,适合大型复杂项目

关键注意事项

  • 不要把数据库密码硬编码在代码里,用环境变量管理(Node.js可以用dotenv包)
  • 生产环境建议用数据库连接池,避免频繁创建/关闭连接(mssql默认支持连接池)
  • 数据库用户只分配必要的权限(比如仅SELECT权限),不要用超级账号
  • 错误信息不要暴露数据库结构等敏感内容,返回通用提示即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:35:46