Forward request to ws client and wait for response Express

前端 未结 3 1892
抹茶落季
抹茶落季 2020-12-22 11:41

I\'m trying to build an endpoint that will receive a request, emit the request data to a WebSocket client, wait for an event, then send back the response using express + soc

3条回答
  •  北海茫月
    2020-12-22 12:15

    Keep an array of express responses and set an id to each request. So it can be used later and delete if needed.

    var app = require('express')();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    var timeout = require('connect-timeout');
    var uuid = require('uuidv4');
    var _ = require('lodash');
    
    app.use(timeout('10s'));
    
    app.get('/', (req, res) => {
        res.sendFile(__dirname + '/index.html');
    });
    
    let responses = []
    
    io.on('connection', (socket) => {
        socket.on('res', (e) => {
            var obj = _.find(responses, r => r.id === e.id);
            obj.res.send(e)
            _.remove(responses, r => r.id === e.id);
        })
    })
    
    app.get('/endpoint', (req, res) => {
        const id = uuid()
        io.emit('req', { id, ip: req.ip, header: req.headers, method: req.method });
        responses.push({ id, res })
    });
    
    http.listen(3000);
    

提交回复
热议问题