Nodejs使用http模块创建Web服务器接收解析RFID读卡器刷卡数据

本示例使用设备: https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d292c1buHvw58&ft=t&id=22173428704

Javascript源码

//引用http模块创建web服务器,监听指定的端口获取以GET、POST、JSON等方式上传的数据,并回应驱动读卡器显示文字、蜂鸣响声、播报语音、开启继电器等操作。 
const http = require('http');
const url = require('url');
const querystring=require('querystring');

const hostname = '192.168.1.211';       //本机IP
const port = 88;                        //监听端口

let info="";            //接收到的数据包号,需回应该包号
let jihao="";           //设备自编机号
let cardtype="";        //刷卡标志,卡类型
let scantype="";        //扫码标志
let heartbeattype="";   //心跳包标志  
let card="";            //接收到的原始16进制卡号,可根据需要自行转换成其他卡号
let data="";            //扇区内容 或 扫码信息  
let input="";           //输入标识
let output="";          //输出标识  
let rand="";            //设备随机数
let dn="";              //设备硬件序列号,出厂时已固化,全球唯一
let status="";          //读卡状态,如12表示卡密码认证失败  
let RepStr="";

const server = http.createServer((request, response) => {
    console.log(request.method);
    console.log(request.url);
    console.log(request.httpVersion);
    console.log(request.headers);
    console.log(request.headers.host);
    
    if(request.method=="GET"){              //解析GET方式提交的数据
        let res = url.parse(request.url, true);
        info=res.query.info;
        jihao=res.query.jihao;
        cardtype=res.query.cardtype;
        scantype=res.query.scantype;
        heartbeattype=res.query.heartbeattype;
        card=res.query.card;
        data=res.query.data;
        input=res.query.input;
        output=res.query.output;
        rand=res.query.rand;
        dn=res.query.dn;
        status=res.query.status;
		if (info !="" && dn !=""){          //通过解析获取到了数据包信息info 和设备硬件信息, 表示确为HTTP 网络读卡器上传的信息,立即回应
			RepStr="Response=1";            //Response=1 固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声            
			RepStr = RepStr + "," + info;   //提交的信息序号,一定要对应
			RepStr = RepStr + ",Cardno:"+ card+"  welcome to use!";   //读卡器上显示文字,显示中文要转换编码,显示信息不能有半角符逗号
			RepStr = RepStr + ",5";         //显示时长,单位为秒
			RepStr = RepStr + ",2";         //蜂鸣器发声种类,取值范围0-12
			RepStr = RepStr + ",";          //播报的TTS语音,中文语音要转换编码
			RepStr = RepStr + ",20";        //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器
			RepStr = RepStr + ",30";        //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器
			response.end(RepStr);
			console.log(RepStr+"\n\n");
		} 

    }else if(request.method=="POST"){
        let body = '';
        request.on('data', chunk => {
             body += chunk.toString();
        });

        request.on('end', () => {
            console.log(body);       
            let obj=querystring.parse(body);    //解析POST方式提交的数据
            info=obj.info;
            jihao=obj.jihao;
            cardtype=obj.cardtype;
            scantype=obj.scantype;
            heartbeattype=obj.heartbeattype;
            card=obj.card;
            data=obj.data;
            input=obj.input;
            output=obj.output;
            rand=obj.rand;
            dn=obj.dn;
            status=obj.status;

            if (info ==undefined ){
                var jsonParsed = JSON.parse(body);    //解析POST JSON方式提交的数据  
                //console.log(jsonParsed);
                info=jsonParsed.info;
                jihao=jsonParsed.jihao;
                cardtype=jsonParsed.cardtype;
                scantype=jsonParsed.scantype;
                heartbeattype=jsonParsed.heartbeattype;
                card=jsonParsed.card;
                data=jsonParsed.data;
                input=jsonParsed.input;
                output=jsonParsed.output;
                rand=jsonParsed.rand;
                dn=jsonParsed.dn;
                status=jsonParsed.status;
            }

			if (info !="" && dn !=""){          //通过解析获取到了数据包信息info 和设备硬件信息, 表示确为HTTP 网络读卡器上传的信息,立即回应
				RepStr="Response=1";            //Response=1 固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声            
				RepStr = RepStr + "," + info;   //提交的信息序号,一定要对应
				RepStr = RepStr + ",Cardno:"+ card+"  welcome to use!";   //读卡器上显示文字,显示中文要转换编码,显示信息不能有半角符逗号
				RepStr = RepStr + ",5";         //显示时长,单位为秒
				RepStr = RepStr + ",2";         //蜂鸣器发声种类,取值范围0-12
				RepStr = RepStr + ",";          //播报的TTS语音,中文语音要转换编码
				RepStr = RepStr + ",20";        //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器
				RepStr = RepStr + ",30";        //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器
				response.end(RepStr);
				console.log(RepStr+"\n\n");
			} 
        });        
    }   
})

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vx_13822155058

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值