node部署及简单的接口调用
需求
在个人小程序开发过程中,需要给图片加上水印,但前提是微信需要验证图片的合法性,微信文档给出了接口(/cgi-bin/component/api_authorizer_token、/wxa/media_check_async) 但是微信出于安全考虑要求AppSecret不能在前端暴露只能服务端去调用,其实还有一个原因微信request域名配置不能配置https://api.weixin.qq.com, 所以这个时候就需要再服务端去调用接口, 所以想到用node简单调用一下。
# 步骤 1:在本地创建 Node 项目,新建项目文件夹
mkdir miniapp-server # 创建项目文件夹
cd miniapp-server # 进入项目
npm init -y # 初始化一个新的 Node.js 项目, npm init 会生成一个包含基本配置的 package.json 文件
2
3
# 步骤 2:安装依赖 安装 express和 axios 两个JavaScript库
# express是一个灵活的 Node.js Web 应用框架,它提供了一系列强大的功能,帮助你创建各种 Web 应用和服务端点。
npm install express axios
2
# 步骤 3:写一个简单接口, 创建项目一个 index.js 文件,代码如下:
# 注:这块有个问题,Node.js默认是使用的是require(CommonJS 模块),你不能用import预发(esm模块)
# 如果非要使用import需要再package.json添加 "type": "module"
# import express from 'express'; # 使用 express 创建一个简单的 HTTP 服务器
# import axios from 'axios';
const express = require('express'); # 创建一个 Express 应用实例,是你整个 Node 服务的“入口”和“核心”。
const axios = require('axios');
const app = express();
const port = 3000;
const APPID = '你的AppID';
const APPSECRET = '你的AppSecret';
app.get('/api/get-token', async (req, res) => {
try {
const result = await axios.get(
`https://api.weixin.qq.com/cgi-bin/token`,
{
params: {
grant_type: 'client_credential',
appid: APPID,
secret: APPSECRET,
},
}
);
res.json(result.data);
} catch (e) {
res.status(500).json({ error: '获取失败', detail: e.message });
}
});
app.listen(port, () => {
console.log(`服务已启动: http://localhost:${port}`);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 步骤 4:本地运行
node index.js
访问:http://localhost:3000/api/get-token,能看到返回的 JSON。至此用node简单调用接口就完成了,接下来就是部署到服务器了。
# 步骤 5: 将Node项目部署到服务器
这个时候你需要一台支持部署 Node.js 的服务器 阿里云、腾讯云等,我这已经有阿里云服务器了:
5-1:安装 Node.js
推荐用nvm来安装,也方便后续其它需要方便切换安装其它版本的node.js
# 使用curl工具从指定的URL下载一个脚本文件,并使用管道 | 将下载的内容直接传递给 bash 命令执行...
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 这条命令用于重新加载用户的 .bashrc 配置文件。这样做通常是为了确保对 .bashrc 文件中所做的更改立即生效,比如环境变量的更新或命令别名的添加。
source ~/.bashrc
# 安装nvm --lts 安装Node.js的LTS(长期稳定)版本
nvm install --lts
2
3
4
5
6
5-2:把本地node项目上传到服务器 看个人情况可以通过git-ci来上传,也可以scp来上传,我这采用scp,我把node_modules一起上传了,你也可以在服务器直接执行上述步骤来创建项目,你也可以在服务上再安装一遍 npm install
scp -r miniapp-server user@your-server-ip:/home/user/
# 上传完后,可以直接运行,但是这个时候需要持久化运行node,就需要pm2
node index.js
2
3
5-3:pm2安装及让node保持后台运行
# 全局安装pm2
npm install -g pm2
# 启动一个名为miniapp-api的应用程序 index.js 是启动文件
pm2 start index.js --name miniapp-api
# 这条命令将当前运行的应用程序的配置保存到 package.json 文件中的 scripts 部分。方便以后可以通过 npm start 命令来启动应用程序。
pm2 save
# 设置 PM2 以便在系统启动时自动启动应用程
pm2 startup
2
3
4
5
6
7
8
接下来就是如何通过域名+接口来访问
# 步骤 6:配置域名 & HTTPS & Nginx(用于小程序请求)
因为小程序只能请求HTTPS域名,所以前提你需要准备: 1、服务器安装Nginx 2、一个已经备案过https域名 配置免费https证书 (opens new window) nginx配置
server {
listen 443 ssl;
server_name api.example.com; # Your domain name
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
# 重要:配置接口转发
location /api {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
# 总结:
至此node简单调用接口及部署流程就完成了,后面就可以调用接口了:https://你的域名/api/get-token,如果小程序调用别忘记配置request域名。 如果后面增加接口,或者对node的index.js文件进行了修改,保证修改后生效,需要重启node,因为咱们采用了pm2持久化,用pm2来重启。
pm2 list
# 重启某一个服务
pm2 restart <名称或 ID>
# 重启所有服务
pm2 restart all
# 如何你在开发中频繁修改代码,也可以使用pm2的监听模式(自动重启)
pm2 start index.js --watch
2
3
4
5
6
7
