Koa2中间件计算响应总耗时/设置响应头/读取Json文件返回给客户端
一、项目目录结构
data:存放Json文件,Json文件中包含了返回给客户端的数据
middleware:包含中间件 koa-response-duration.js、koa-response-header.js、koa-response-data.js 文件
service:包含web_socket_service.js,用于处理来自于客户端的连接
二、代码
1、服务器的入口文件: app.js
// 服务器的入口文件 // 1.创建KOA的实例对象 const Koa = require('koa') const app = new Koa() // 2.绑定中间件 // 绑定第一层中间件 const respDurationMiddleware = require('./middleware/koa_response_duration') app.use(respDurationMiddleware) // 绑定第二层中间件 const respHeaderMiddleware = require('./middleware/koa_response_header') app.use(respHeaderMiddleware) // 绑定第三层中间件 const respDataMiddleware = require('./middleware/koa_response_data') app.use(respDataMiddleware) // 3.绑定端口号 8888 app.listen(8888) const webSocketService = require('./service/web_socket_service') // 开启服务端的监听, 监听客户端的连接 // 当某一个客户端连接成功之后, 就会对这个客户端进行message事件的监听 webSocketService.listen()
2、在service目录下,创建web-socket-service.js文件:通过WebSocketService服务端对象,监听来自客户端的连接,即可以通过别的客户端连接到你pc
const path = require('path') const fileUtils = require('../utils/file_utils') const WebSocket = require('ws') // 创建WebSocket服务端的对象, 绑定的端口号是9998 const wss = new WebSocket.Server({ port: 9998 }) // 服务端开启了监听 module.exports.listen = () => { // 对客户端的连接事件进行监听 // client:代表的是客户端的连接socket对象 wss.on('connection', client => { console.log('有客户端连接成功了...') // 对客户端的连接对象进行message事件的监听 // msg: 由客户端发给服务端的数据 client.on('message',async msg => { console.log('客户端发送数据给服务端了: ' + msg) let payload = JSON.parse(msg) const action = payload.action if (action === 'getData') { let filePath = '../data/' + payload.chartName + '.json' // payload.chartName // trend seller map rank hot stock filePath = path.join(__dirname, filePath) const ret = await fileUtils.getFileJsonData(filePath) // 需要在服务端获取到数据的基础之上, 增加一个data的字段 // data所对应的值,就是某个json文件的内容 payload.data = ret client.send(JSON.stringify(payload)) } else { // 原封不动的将所接收到的数据转发给每一个处于连接状态的客户端 // wss.clients // 所有客户端的连接 wss.clients.forEach(client => { client.send(msg) }) } // 由服务端往客户端发送数据 // client.send('hello socket from backend') }) }) }