基于华为云ECS搭建后端天气中转服务实践
一、前言
在之前的微信小程序天气项目开发中,直接在前端调用开放天气接口会存在密钥暴露的安全问题,容易导致接口配额被盗用。因此我选择使用华为云弹性云服务器ECS搭建Node.js后端中转服务,由后端代理请求天气API,再把处理好的数据返回给小程序前端,既保障密钥安全,又能完成项目部署上线,本次记录完整实践过程。
二、方案选型
1. 服务器:华为云ECS,稳定可靠,方便部署Node服务、配置端口访问
2. 后端技术栈:Node.js + Express,搭配axios请求第三方接口、cors处理跨域
3. 前端:微信小程序,负责页面展示、交互,请求本机/云服务器后端接口
4. 接口来源:百度开放平台天气接口,获取实时温度、最高温、最低温、天气状况
三、后端核心代码
package.json
{
"name": "weather-backend",
"version": "1.0.0",
"description": "百度天气接口中转后端,获取实时温度、天气、最高最低气温",
"main": "server.js",
"dependencies": {
"express": "^4.18.2",
"axios": "^1.6.0",
"cors": "^2.8.5"
}
}
server.js
const express = require('express')
const axios = require('axios')
const cors = require('cors')
const app = express()
app.use(cors())
// 这里填入你自己在百度开放平台申请的ak
const BAIDU_AK = "你的百度ak密钥"
app.get('/api/weather', async (req, res) => {
try {
const { location } = req.query
const resp = await axios.get('https://api.map.baidu.com/weather/v1/', {
params: {
location: location,
ak: BAIDU_AK
}
})
res.json(resp.data)
} catch (err) {
res.status(500).json({code:-1,msg:"接口请求失败"})
}
})
const port = 3000
app.listen(port,()=>{
console.log(`服务启动成功,监听端口${port}`)
})
四、华为云ECS部署步骤
1. 购买并登录ECS:在华为云控制台申领/购买ECS实例,选择Linux系统(CentOS或者Ubuntu),获取公网IP、登录账号密码,使用远程工具连接服务器。
2. 环境安装
- 安装Node.js、npm环境
- 在服务器新建项目文件夹,上传上面两份代码文件
- 执行 npm install 安装express、axios、cors依赖包
3. 安全组放行端口:进入华为云ECS安全组配置,放行3000端口,不然外网无法访问后端服务。
4. 后台常驻运行:使用pm2工具托管服务,保证断开远程连接之后,后端程序持续运行,命令:
npm install -g pm2
pm2 start server.js
5. 测试接口:浏览器访问 http://ECS公网IP:3000/api/weather?location=城市经纬度 ,验证能否正常返回天气JSON数据。
五、小程序前端对接
修改小程序js里面的请求地址,把原来本地地址替换为华为云ECS公网接口地址,同时在微信小程序后台配置request合法域名,编译小程序,即可从云服务器后端拿到天气数据,渲染页面展示实时气温、最高最低温、天气情况。
六、踩坑总结
1. 跨域问题:一开始小程序请求直接报错跨域,引入cors中间件后解决。
2. 安全组端口:忘记放行3000端口,一直访问超时,排查很久才定位到是华为云安全组策略拦截。
3. 密钥安全:一定不要把AK密钥写在小程序前端,中转后端的意义就是隐藏密钥。
4. 服务中断:直接node server.js运行,关掉远程窗口服务就停止,pm2托管是云服务器部署Node服务常用方案。
七、心得体会
本次借助华为云ECS完成后端服务部署,让我理解了前后端分离项目的完整上线流程。ECS作为基础云服务器,自由度很高,可以自主部署后端程序。这次实践,也加深了我对接口代理、跨域、云服务器安全组、服务常驻这些开发运维知识点的理解,为之后更多小程序、Web项目上云打下基础。
- 点赞
- 收藏
- 关注作者
评论(0)