如何在本地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 dotenvexpress:核心Web框架,帮你快速搭建APImssql:用来连接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请求:
如果一切正常,就能收到SQL存储过程返回的结果。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"}'
后续注意事项
- 本地测试没问题后,以后部署到专用服务器时,记得把
.env里的数据库配置改成服务器的信息,同时开启SQL Server的远程连接权限 - 生产环境要加更多安全措施,比如HTTPS、接口限流、更严格的身份验证(比如JWT)
- 开发时可以用
nodemon实现自动重启服务器,安装npm install -D nodemon,然后在package.json里加脚本:"start": "nodemon server.js"
备注:内容来源于stack exchange,提问作者TheMortiestMorty
相关产品推荐
相关产品推荐

