下载地址:
游客,本帖隐藏的内容需要积分高于 1 才可浏览,您当前积分为 0
能量剪切板 API
源码全开源 ,前端uniaapp 后端nodejs
Node.js + Express + MySQL,为 Telegram Mini App 提供用户登录接口。
**Node 版本:>= 16.9.0**
## 本地启动
```bash
cd server
npm install
copy .env.example .env # 填写 DB、TELEGRAM_BOT_TOKEN
mysql -u root -p < sql/init.sql
npm run dev
```
本地验证:
```bash
curl http://127.0.0.1:3338/health
# {"ok":true,"name":"能量剪切板 API","version":"2.0.0"}
curl -X POST http://127.0.0.1:3338/api/auth/telegram \
-H "Content-Type: application/json" \
-d "{\"initData\":\"test\"}"
# 应返回业务错误(校验失败),而不是 404
```
## 线上部署(宝塔)
本地能访问 `/health`,但 `https://nv.gitx.top/health` 返回 `{"code":404,"msg":"接口不存在"}`,说明:
1. **域名没有指到这份新代码**(仍是旧 Node 进程,或反代到了错误端口)
2. **或 Nginx 反代路径剥掉了前缀**,导致 Express 收不到 `/health`
### 步骤 1:上传并启动 Node
1. 将 `server/` 整个目录上传到服务器
2. 执行 `npm install`
3. 配置 `.env`(示例):
```env
PORT=3338
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=nl
DB_PASSWORD=你的密码
DB_NAME=nl
JWT_SECRET=随机长字符串
TELEGRAM_BOT_TOKEN=BotFather 里的 Bot Token
# 可选:让 Node 同时托管 H5
# STATIC_DIR=/www/wwwroot/nv.gitx.top
```
4. 导入 `sql/init.sql`
5. 宝塔 → Node 项目 → 启动文件 `src/index.js`,端口 **3338**
### 步骤 2:配置反向代理(Apache / Nginx)
服务器上 `curl http://127.0.0.1:3338/health` 已正常时,外网仍 404 说明 **Web 服务器未反代到 3338**。
完整示例见 `server/deploy/apache.bt.conf`(Apache)或 `server/deploy/nginx.bt.conf`(Nginx)。
**Apache(宝塔)— 整站反代到 Node**
在站点 `<VirtualHost *:443>` 内加入:
```apache
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3338/
ProxyPassReverse / http://127.0.0.1:3338/
```
保存后重载 Apache。若提示模块未启用,在宝塔 Apache 设置里勾选 `proxy`、`proxy_http`。
**Nginx — 整站反代到 Node**
```nginx
location / {
proxy_pass http://127.0.0.1:3338;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
```
**静态网站 + 仅 API 反代**:网站目录放 H5,`/api` 反代到 `127.0.0.1:3338`(Apache 见 `apache.bt.conf` 方案 B)。
本服务已同时支持 `/api/auth/telegram` 与 `/auth/telegram` 两种路径。
### 步骤 3:验证部署
部署并重启 Node 后,在浏览器访问:
| 地址 | 期望结果 |
|------|----------|
| `https://nv.gitx.top/health` | `{"ok":true,"name":"能量剪切板 API","version":"2.0.0"}` |
| `https://nv.gitx.top/api/health` | 同上 |
| `POST /api/auth/telegram` | 非 404(initData 无效时返回 401) |
若仍是 `接口不存在`,请检查:
- 服务器上 `curl http://127.0.0.1:3338/health` 是否正常(正常则问题在 Apache/Nginx)
- 宝塔 Node 项目是否 **已重启**、端口是否为 **3338**
- Apache `ProxyPass` / Nginx `proxy_pass` 是否指向 `127.0.0.1:3338`
## API
### Telegram 登录
- **POST** `/api/auth/telegram`
- Body: `{ "initData": "<Telegram.WebApp.initData>" }`
- 响应:
```json
{
"code": 200,
"msg": "登录成功",
"data": {
"token": "...",
"user": { "id": 1, "displayName": "...", "avatar": "...", "username": "..." },
"isNew": false
}
}
```
### 当前用户
- **GET** `/api/user/info`
- Header: `Authorization: <token>`
|