How to send response back to client using socket.io?

Your server code should look like this:

socket.on('startRecording',function (callbackFn) {
    var response;
    logsRecording(function (filename) {
        callbackFn(filename);
    });

If you want to pass in data from your client:

socket.emit('startRecording', {someData: 'value'}, function (response) {

then server will be :

socket.on('startRecording',function (dataFromClient, callbackFn) {

To acknowledge the message, your handler for the startRecording event needs to accept an acknowledgement callback as a parameter. You can then call that with your desired data. See Sending and getting data (acknowledgements)

socket.on('startRecording',function (socket, ackFn) {
    var response;
    logsRecording(function (filename) {
        ackFn(filename);
    });
});

Alternatively, you could add a listener for that filename event you have commented out, in the client.js:

socket.emit('startRecording');
socket.on('filename', function(filename) {
    console.log('Filename received: ' + filename);
});

It might be helpful to run through Get Started: Chat application starting at the heading "Integrating Socket.IO" to get a more general understanding of Websockets.


Thank you for this helpfull hint

Here an 2020 "call" example call possible to use with moleculer microservices with four arguments:

The server responds in the callback function with two arguments err and res for the angular promise.

Angular 9 socket io

protected call(method: string, param?: any) {
    try {
        return new Promise((resolve, reject) => {
            this.socket.emit("call", method, param, (err: any, res: unknown) => {
                console.log(res);
                if (err) { return reject(err); }
                return resolve(res);
            });
        });
    } catch (err) {
        console.error(err);
    }
}

Socket IO server response

  socket.on('call', function(method, param, callbackFn){ // call method, param, 
    console.log(param);
    switch (method) {
        case "test":
            console.log("test detected");
            callbackFn(null , {name:"test",email:"test"});          
            break;
    }
  });