目录
1. 网站视图
1. 网站版浏览视图
2. 手机端浏览视图
3. 删除弹框
2. Telegram通知
2.1 收到机器人消息
2.2 两个简单的api
3. 后端: NodeJs-server
4. 前端: VueJs-web
5. 网关: Runing service
5.1 Nodejs-server-run service
5.2 Nginx网关配置
看群里聊天说到单身的问题,
弄个计数统计一下单身人数,
半小时左右差不多搞定,
代码是很简单,说下过程吧
1. 网站视图
1. 网站版浏览视图
2. 手机端浏览视图
3. 删除弹框
2. Telegram通知
2.1 收到机器人消息
微信也有别人做的机器人,但是安全第一,我没使用
2.2 两个简单的api
https://message.xxx.com/sendMessage?text
https://message.xxx.com/deleteMessage?text
3. 后端: NodeJs-server
没有特殊需求, 用VSCode手动写写就行了
const express = require('express')
const bodyParser = require('body-parser')
const axios = require('axios');
const http = require('http')
const path = require('path')
const fs = require('fs')
const store = require('store')
const app = express()
app.use(bodyParser.json())
// 允许所有内容跨域
app.all('*', function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*')
res.header('Access-Control-Allow-Headers', 'Content-Type')
next()
})
// 首页载体
app.get('/', function (req, res) {
const html = fs.readFileSync(path.resolve(__dirname, 'index.html'), 'utf-8')
res.send(html)
})
// 获取api消息(没有用数据库,radis也没用,这么点数据量,直接存文件就行了)
app.get('/sendMessage', function (req, res) {
// 将query参数给编码一下传输过来再解码就行
var text = JSON.parse(decodeURIComponent(req.query.text))
console.log(text)
try {
text = JSON.stringify(text)
writerMessage(text)
} catch (e) {
res.send({'result': 'error'})
} finally {
sendToTelegram(req, res, "收到信息: "+ip +"rn"+ text)
}
})
function writerMessage(text) {
fs.readFile("message.config", (err, data) => {
if (err) {
res.send({'result': 'error','message' : err})
return
}
// 写入文件之前读取所有的文件内容,再一次写入
var results = (data && data.length>0) ? JSON.parse(data) : [];
results.push(text)
var resultsSaved = JSON.stringify(results)
console.log('results:' + resultsSaved)
// 新旧数据一并写入
fs.writeFile("message.config", resultsSaved, err => {
if (err) {
res.send({'result': 'error','message' : err})
}
res.send({'result': 'ok'})
});
})
}
// 发送到telegram机器人
function sendToTelegram(req, res, text) {
const ip = 'none'
const path = 'https://*******text=' +text
axios.get(path)
.then(response => {
// res.send({'result': 'ok'})
})
.catch(error => {
// res.send({'result': 'error'})
})
}
app.get('/getMessage', function (req, res) {
fs.readFile("message.config", (err, data) => {
if (err) {
res.send({'result': 'error','message' : err})
return
}
var results = (data && data.length>0) ? JSON.parse(data) : [];
console.log("results:"+results)
res.send({result:'ok', data: results})
})
})
// 加个删除通知,手动删一下
app.get('/deleteMessage', function (req, res) {
var text = decodeURIComponent(req.query.text)
const sendText = "删除信息:rn"+ text
const ip = 'none'
sendToTelegram(encodeURIComponent(sendText))
})
const httpServer = http.createServer(app)
httpServer.listen(3000, function () {
console.log(`nsuccess : http://ip:3000n`)
})
4. 前端: VueJs-web
页面稍微好看点引入个elementui就行
5. 网关: Runing service
5.1 Nodejs-server-run service
vscode直接devpush到远程主机或者手动都一样
install nodejs
Installing Node.js via package manager | Node.js
# Using Ubuntu curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo apt-get install -y nodejs # Using Debian, as root curl -fsSL https://deb.nodesource.com/setup_14.x | bash - apt-get install -y nodejs
新建一个systemctl任务,添加开机启动就行
[Unit] Description=Description for intbird WantedBy=network-online.target After=network-online.target [Service] Type=forking User=root Group=root ExecStart=xxxxxx/node.js.sh Restart=on-failure RestartSec=5s TimeoutStartSec=0 RemainAfterExit=yes [Install]
5.2 Nginx网关配置
proxy: Headers 和 Real ip 看这里
Host - HTTP | MDN
ngx_http_realip_module
这台服务器nginx,caddy等都有,随便用个nginx就行
server
{
listen 127.0.0.1:4443 proxy_protocol;
listen 127.0.0.1:4444 http2 proxy_protocol;
server_name xxx.xxx.com;
charset utf-8;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_pass http://127.0.0.1:3000;
}
}


