目录
1. 网站视图
1. 网站版浏览视图
2. 手机端浏览视图
3. 删除d框
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. 删除d框 2. Telegram通知 2.1 收到机器人消息微信也有别人做的机器人,但是安全第一,我没使用
2.2 两个简单的apihttps://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; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)