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

如何在本地PC搭建可处理Flutter HTTP请求的API服务器(含Node.js与Express.js选择及功能实现疑问)

如何在本地PC搭建可处理Flutter HTTP请求的API服务器(含Node.js与Express.js选择及功能实现疑问)

别担心,刚上手API开发完全能理解这种懵懵的状态,我来一步步给你理清楚怎么搞,先从你问的Node.js和Express.js的关系说起:

Node.js vs Express.js:你该怎么选?

简单说,Node.js是让JavaScript能在服务器端运行的runtime环境,相当于你搭建API的“地基”;而Express.js是基于Node.js的轻量级Web框架,它帮你封装了很多处理HTTP请求、路由、中间件的底层逻辑,能让你快速写出稳定的API接口——所以你根本不用选,直接一起用就对了,Express是Node.js生态里做API最常用的工具之一。

接下来是具体的实现步骤,跟着做就能在本地跑起来:


1. 先搞定环境准备

  • 先下载安装Node.js的LTS版本(长期支持版,更稳定),安装时勾选自动配置环境变量
  • 打开终端/命令提示符,输入node -v和npm -v,如果能显示版本号,说明安装成功了

2. 初始化你的API项目

  • 找个文件夹当项目目录,打开终端进入这个文件夹
  • 运行npm init -y,自动生成package.json文件(管理项目依赖和脚本)
  • 安装需要的依赖:
    npm install express mssql dotenv
    
    解释下这几个包:
    • express:核心Web框架,帮你快速搭建API
    • mssql:用来连接SQL Server并执行存储过程
    • dotenv:帮你管理环境变量(比如数据库密码、端口号这类敏感信息)

3. 写基础的服务器代码

在项目根目录创建server.js文件,先写个最基础的服务器结构:

require('dotenv').config();
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

// 解析JSON格式的请求体(适配Flutter发过来的JSON请求)
app.use(express.json());

// 测试接口,验证服务器能正常运行
app.get('/test', (req, res) => {
  res.send('本地API服务器运行正常!');
});

// 启动服务器
app.listen(port, () => {
  console.log(`服务器在本地${port}端口运行,访问http://localhost:${port}/test试试`);
});

然后在项目根目录创建.env文件,存放配置信息:

PORT=3000
DB_SERVER=你的SQL Server地址(本地一般是localhost)
DB_DATABASE=你的数据库名
DB_USER=数据库用户名
DB_PASSWORD=数据库密码

4. 实现请求验证的中间件

你需要验证device ID、用户登录信息、网络状态,用Express的中间件最合适——它可以在请求到达业务逻辑前先做校验。在server.js里加一段:

// 自定义验证中间件
const validateRequest = (req, res, next) => {
  // 假设验证信息放在请求头里,也可以根据需求放在请求体中
  const { deviceId, userLogin, network } = req.headers;

  // 检查必要字段是否存在
  if (!deviceId || !userLogin || !network) {
    return res.status(403).json({ error: '缺少必要的验证信息:deviceId、userLogin、network必须齐全' });
  }

  // 这里还可以加更复杂的验证逻辑,比如去数据库查deviceId是否合法、userLogin是否已登录等
  // 示例:
  // const isValidDevice = await checkDeviceInDB(deviceId);
  // if (!isValidDevice) return res.status(403).json({ error: '无效的设备ID' });

  // 验证通过,继续执行后续业务逻辑
  next();
};

5. 连接SQL Server并调用存储过程

接下来写处理业务逻辑的路由,结合上面的中间件:

const sql = require('mssql');

// 数据库连接配置
const dbConfig = {
  server: process.env.DB_SERVER,
  database: process.env.DB_DATABASE,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  options: {
    encrypt: false, // 本地SQL Server一般不用加密,生产环境再开启
    trustServerCertificate: true
  }
};

// 处理业务请求的路由,先经过验证中间件
app.post('/api/run-proc', validateRequest, async (req, res) => {
  try {
    // 连接数据库
    await sql.connect(dbConfig);

    // 获取请求参数(根据你的存储过程需要调整参数名和数量)
    const { param1, param2 } = req.body;

    // 调用存储过程
    const result = await sql.query`EXEC 你的存储过程名 @Param1 = ${param1}, @Param2 = ${param2}`;

    // 返回SQL执行结果
    res.status(200).json({ data: result.recordset });
  } catch (err) {
    console.error('数据库操作出错:', err);
    res.status(500).json({ error: '服务器内部错误,请稍后重试' });
  } finally {
    // 关闭数据库连接
    await sql.close();
  }
});

6. 测试你的API

  • 启动服务器:在终端运行node server.js,看到控制台输出服务器运行的提示就说明成功了
  • 用Flutter发HTTP请求,或者用Postman、curl测试:
    比如用curl发POST请求:
    curl -X POST http://localhost:3000/api/run-proc \
    -H "Content-Type: application/json" \
    -H "deviceId: testDevice123" \
    -H "userLogin: testUser" \
    -H "network: WIFI" \
    -d '{"param1": "测试参数1", "param2": "测试参数2"}'
    
    如果一切正常,就能收到SQL存储过程返回的结果。

后续注意事项

  • 本地测试没问题后,以后部署到专用服务器时,记得把.env里的数据库配置改成服务器的信息,同时开启SQL Server的远程连接权限
  • 生产环境要加更多安全措施,比如HTTPS、接口限流、更严格的身份验证(比如JWT)
  • 开发时可以用nodemon实现自动重启服务器,安装npm install -D nodemon,然后在package.json里加脚本:"start": "nodemon server.js"

备注:内容来源于stack exchange,提问作者TheMortiestMorty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 10:13:15