Skip to content

HTTP对接

从Scada的HTTP转发里面获取实时数据与控制数据
主要用于测试,实际需要写在自己的服务端

javascript
const {getVariant,executeSql,exePgSqlR,exePgSqlCUD,exeSqliteSqlR,exeSqliteSqlCUD,getCurrentOrLastValue,setVariantValue,watch,watchAlarm,table,executeDataSourceSql,sendWxTextMessage,sendWxMessage,sendDingTextMessage,sendDingMessage,alarm } = require("GlobalConfig");//头文件请勿删除
const {getFormulaGroupList,getFormulaList,delFormula,getLastDownFormula,addFormula,editFormula,downloadFormula} = require("FormulaApi");//头文件请勿删除

const {generateTime} = require('hj212')
const http = require('http');
const url = require('url');

// 指定要监听的端口
const PORT = 7878;
// 指定处理路径
const HANDLE = '/device/getVariantList';

// 创建HTTP服务器
const server = http.createServer((req, res) => {
    // 解析URL
    const parsedUrl = url.parse(req.url, true);
    const pathname = parsedUrl.pathname;

    // 设置CORS头,允许跨域请求(可选)
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type');

    // 处理OPTIONS预检请求
    if (req.method === 'OPTIONS') {
        res.writeHead(200);
        res.end();
        return;
    }

    // 只处理指定路径
    if (pathname === HANDLE) {
        let body = '';

        // 收集请求体数据(如果是POST/PUT请求)
        req.on('data', chunk => {
            body += chunk.toString();
        });

        // 请求结束时处理
        req.on('end', () => {
            console.log(`${generateTime('ss')} 接收到 ${HANDLE} 请求, 请求体: ${body}`);

            const result = JSON.parse(body)
            // 控制变量的值T2等于HTTP转发的T1的值
            if(result['T1']){
                `T2`.value = result['T1']
            }

            // 返回响应
            res.writeHead(200, { 'Content-Type': 'application/json' });
            res.end(JSON.stringify({
                code: 0,
                message: '成功接收到请求'
            }));
        });

        req.on('error', (err) => {
            console.error('请求处理错误:', err);
            res.writeHead(500, { 'Content-Type': 'application/json' });
            res.end(JSON.stringify({ error: '服务器内部错误' }));
        });

    } else {
        // 其他路径返回404
        res.writeHead(404, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({ error: '路径未找到' }));
    }
});

// 启动服务器
server.listen(PORT, () => {
    console.log(`服务器已启动,监听端口: ${PORT}, 测试地址: http://localhost:${PORT}${HANDLE}, 等待请求...\n`);
});

// 处理服务器错误
server.on('error', (err) => {
    console.error('服务器错误:', err);
});

// 优雅关闭
process.on('SIGINT', () => {
    server.close(() => {
        process.exit(0);
    });
});

SCADA帮助文档