目录结构
服务端server.js
var express = require('express')
var expressWs = require('express-ws')
var fs= require('fs')
var path = require('path'); //系统路径模块
//http协议,ws模块无法被浏览器直接访问
var app = express()
expressWs(app)
app.ws('/echo', (ws, req) => {
ws.on('connection', function (connection) {
//...
})
ws.on('close', function () {
//...
})
})
//在public下 这个是挂载静态文件
app.use(express.static('public'))
//这里是读取我的index.html吧 这个可以不用
app.get('/',function(req,res)
{
res.sendfile("./public/index.html"); //sendfile没用过 应该是返回文件
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})
var http = require('http').Server(app);
var io = require('socket.io')(http);
//当有完整连接时触发connection函数
let oc = io.on('connection', function (socket) {
return socket
});
//这里的obj就是我sendData里的message数据
//sendDataquery区块链查询
exports.sendDataquery=function(obj){
oc.emit('dataquery', obj)
}
//这里添加
exports.sendDataadd=function(obj){
oc.emit('dataadd', obj)
}
//定义访问端口为8088
http.listen(8088, function () {
});
客户端index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>nodejs socket.io</title>
</head>
<body>
<script type="text/javascript" src="http://127.0.0.1:8088/socket.io/socket.io.js"></script>
<script type="text/javascript">
window.conn = io.connect('ws://127.0.0.1:8088')
//查询接口返回值到页面
conn.on('dataquery', function (dataquery) {
console.log(dataquery)
})
//添加接口返回值到页面
conn.on('dataadd', function (dataadd) { //这样对应的
console.log(dataadd)
})
</script>
</body>
</html>
在nodejs 接口中使用
//数据查询接口
router.post('/blockchain/querylist', function(req, res) {
arr = [];
var array='';
var codeid;//标识
console.info('===================进入最新10条数据查询===================');
addMysql.queryMysqltenlist(req, res).then( async function(message){
//通过numid查询链码库最新数据条数
console.info('数据长度===' +message.length);
//将message返回值转为JSON数据格式
array=JSON.stringify(message)
//查询数据
for(var i=0;i<message.length;i++){
array=message[i];
console.info('数据参数===' +array);
//根据数据的id上链查询
var options = paramMgr.getUserEnv(req);
options.args = [ array ];
options.fcn = 'query';
//链码查询,使用await同步,先for循环,后send
let list = await queryasync.queryChaincodeasync(options);
arr.push(list);
}
//调用socket.io,将值转换为JSON格式数据
socket.sendDataquery(JSON.stringify(arr))
//send给前端的数据
res.send(arr);
}
)
})