之前博客一直用的公共的随机图API,虽然图片的质量都挺不错的,但是稳定性都比较一般,遂打算使用之前部署的兰空图床,自己弄一个随机图
本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作,有兴趣的话可以去官网看看
兰空图床
兰空图床的部署过程可参考我之前的文章:搭建兰空图床并配合 PicGo 实现批量上传 | 火柴人儿的小站
获取Token
获取token的接口地址在兰空图床的接口文档中有写
使用api工具(ApiFox或者Postman都行)请求一次接口,Headers和Body按照我这个填就行,邮箱和密码要改成自己的
创建项目
-
创建项目
-
初始化一个新的Node.js项目
npm init -y
-
安装Express和Axios
npm install express axios
-
-
编写后端代码
-
创建一个名为
app.js
的文件,并编写以下代码: -
const express = require('express'); const axios = require('axios'); const app = express(); const port = 3000; //自定义一个未使用的端口app.get('/', async (req, res) => {try {const response = await axios.get('http://xxxxxx/api/v1/images?album_id=xx',{ //兰空图床接口,用于获取指定相册下的所有图片headers: {'Authorization': 'Bearer xxxxx', // 兰空图床的Token'Accept': 'application/json', // 兰开图床公共请求参数}});const images = response.data.data.data;const randomIndex = Math.floor(Math.random() * images.length);const randomImage = images[randomIndex];res.redirect(randomImage.links.url); //重定向到图片地址} catch (error) {res.status(500).send('Internal Server Error');} });app.listen(port, () => {console.log(`Server is running at http://localhost:${port}/`); });
-
运行
node app.js
-
-
测试
浏览器访问地址
localhost:3000
就可以访问随机图片了,本地测试无误之后就需要放到服务器上运行了
部署
可能因为我是用docker部署的宝塔,所以有些问题,没法用宝塔部署node项目,所以改为手动部署
-
新建并进入目录randomImgs
mkdir /home/randomImgs cd /home/randomImgs
-
将项目文件导入到randomImgs中(使用SSH工具导入,我这里用的是WindTerm)
-
若已经安装过node,则直接执行以下命令即可,未安装node的话安装此教程——如何在服务器上安装node、npm_服务器安装npm-CSDN博客即可安装,记得把里面的版本号改为
16.17.0
或者>=你本地的版本号nohup node app.js &
会提示
nohup: ignoring input and appending output to ‘nohup.out’
,这个是正常的,意思就是项目日志会追加到nohup.out文件中,直接回车就行 -
配置nginx
-
去DNS添加一条A记录来创建一个子域名
-
创建php项目,使用刚刚创建的子域名
-
添加反向代理,目标URL为http://服务器IP:3000
这里的
3000
为node项目中app.js设定的端口
-
-
此时就可以通过子域名获取随机图了
优化
因为涉及到token,所以可以使用javascript混淆进行简单的防护
-
使用在线Javascript混淆加密,用混淆后的内容替换app.js中的内容