React Native生产环境如何配置API对接AWS MySQL数据库
Expo+React Native 开发转生产环境配置指南
一、Axios 多环境baseURL配置(替换硬编码地址)
不要在业务代码里写死IP和端口,通过环境变量自动区分开发/生产环境,步骤如下:
- 项目根目录新建两个环境配置文件:
- 开发环境:
.env.development,写入API_BASE_URL=http://你本地调试的机器IP:19056 - 生产环境:
.env.production,写入API_BASE_URL=https://你的生产服务域名(生产环境不要直接用裸IP+端口,必须配置HTTPS域名)
- 开发环境:
- 安装环境变量读取依赖:执行命令
npx expo install react-native-dotenv - 修改根目录下
babel.config.js配置,让构建时自动匹配对应环境的变量:
module.exports = function(api) { api.cache(true); return { presets: ['babel-preset-expo'], plugins: [ ['module:react-native-dotenv', { moduleName: '@env', path: process.env.NODE_ENV === 'production' ? '.env.production' : '.env.development', allowUndefined: false }] ] }; };
- 封装统一的Axios请求实例,全局配置baseURL,后续所有接口直接写路径即可:
import axios from 'axios'; import { API_BASE_URL } from '@env'; const request = axios.create({ baseURL: API_BASE_URL, timeout: 10000 }); // 原请求代码修改为如下写法,不需要再写全域名/IP+端口 // request.post("/location", body).then(response => console.log(response)).catch(err => console.log(err))
注意:你示例代码里的请求地址http://53.183.245.150/:19056/location存在格式错误,端口前多了一个斜杠,正确格式为http://IP:端口/接口路径
二、Express服务端生产环境修正
你当前的服务端代码仅适配本地开发场景,上线前需要做以下调整:
- 数据库连接配置优化
- 禁止使用
root账号连接生产MySQL,单独新建一个仅拥有业务所需库表权限的账号,设置强密码,删除空密码配置 - 如果Node服务和现有PHP网站、MySQL部署在同一个AWS VPC内,
host字段填写MySQL内网地址(同机部署填127.0.0.1,RDS填内网端点),不要用公网IP连接数据库,同时AWS安全组要禁止3306端口对公网开放 - 共用现有生产MySQL是完全可行的,只要保证新账号有对应业务表(users、trips等)的读写权限即可,注意SQL逻辑不要和现有PHP业务冲突,避免影响线上网站运行
- 禁止使用
- CORS配置收紧
不要用默认的全放开app.use(cors())配置,生产环境仅放行信任的来源:
const allowedOrigins = process.env.NODE_ENV === 'production' ? ['https://你的线上网站域名'] // 后续如果加移动端应用白名单再补充对应值 : ['*']; app.use(cors({ origin: (origin, callback) => { if (allowedOrigins.includes(origin) || !origin) return callback(null, true); callback(new Error('CORS policy: Origin not allowed')); } }));
- 端口配置
你现有代码里const PORT = process.env.PORT || 19056的写法已经适配多环境,生产部署时通过系统环境变量传入端口即可,建议用Nginx做反向代理,把Node服务监听在本地端口,对外仅开放80(HTTP)/443(HTTPS)端口,不要把19056业务端口直接暴露在公网。 - 接口逻辑优化
现有登录接口无论查询成功、账号密码错误还是服务报错都直接返回rows,建议补充标准HTTP状态码:账号密码错误返回401,服务异常返回500,方便前端做统一异常处理。
三、生产部署注意事项
- 所有公网接口必须配置HTTPS,禁止HTTP明文传输,尤其是登录类涉及用户敏感信息的接口,SSL证书在Nginx层配置即可,请求转发到本地Node服务走HTTP不影响使用
- 执行Expo生产构建(
eas build打安卓/ios安装包)时,构建流程会自动读取.env.production里的baseURL配置,不需要手动修改代码切换环境 - 上线前先做接口连通性测试,确认移动端能正常通过HTTPS域名访问到Node服务,且Node服务能正常读写AWS上的MySQL数据
内容的提问来源于stack exchange,提问作者geyser
相关产品推荐
相关产品推荐

