从零开始的完整代码: Vuejs前端 + Nodejs后端读写文件 + 消息通知到TG(钉钉机器人也行) + Nginx发布

从零开始的完整代码: Vuejs前端 + Nodejs后端读写文件 + 消息通知到TG(钉钉机器人也行) + Nginx发布,第1张

从零开始的完整代码: Vuejs前端 + Nodejs后端读写文件 + 消息通知到TG(钉钉机器人也行) + Nginx发布

目录

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 两个简单的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;
        }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4992462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存