socket.io / Parameter in Verbindung

In meinem node.js /Express.js app, muss ich Parameter übergeben, mit dem sockel.io-Verbindung (habe das in einem anderen post).

Auf der client-Seite, ich habe so etwas wie :

Bearbeiten

var socket = io.connect('/image/change', {query:"name=my_img_name"});
var siofu = new SocketIOFileUpload(socket);

siofu.listenOnInput(document.getElementById("change_image_inpt"));

Auf der server-Seite :

Bearbeiten

io.of('/image/change')
  .on('connection', function (socket) {
  console.log('log input param : ' + socket.handshake.query.name);
});

Aber nichts in der Konsole.

Gibt es eine andere Möglichkeit das zu erreichen ?

edit2

Dies ist der vollständige code für den client :

$(document).ready(function() {

//icon_action_modal
$('.icon_actions').on('click', function() {
    //set icon preview
    $('#icon_action_modal_icon_preview').html('<img src="/upload/icon/' + $(this).data('icon') + '.png" />');

    //set icon to delete
    $('#icon_name').val($(this).data('icon'));

    //set Change icon socket
    var socket = io.connect('/icon_sets/change', {query:"name=my_img_name"});
    var siofu = new SocketIOFileUpload(socket);

    siofu.listenOnInput(document.getElementById("change_icon"));

    //Do something when a file is uploaded
    siofu.addEventListener("complete", function () {
        $('.overlay').hide();
    });

    //display loader window
    socket.on('displayOverlay', displayOverlay);

    //display
    socket.on('displayIconImage', function (data) {
        $('#iconset_render').append('<div class="icon"><img src="' + data.path + '" /></div>');
    });

    socket.on('setIconsetArray', function (data) {
        var iconset = ($('#iconset_array').val()) ? JSON.parse($('#iconset_array').val()) : [];

        iconset.push(data.iconName);

        $('#iconset_array').val(JSON.stringify(iconset));

        deleteIcon($('#icon_name').val());

        //close modal
        $('#icon_action_modal').modal('hide');
    });

});

$('#icon_action_modal_delete_icon').on('click', function() {
    deleteIcon($('#icon_name').val());

    //close modal
    $('#icon_action_modal').modal('hide');
});

}); //end document.ready

Und der vollständige code für die server-Seite :

io.of('/icon_sets/change')
  .on('connection', function (socket) {
    console.log('log input param : ' + socket.handshake.query.name);
    functions.socketImageTransfer(socket, 'icon', 65, 65);
});

Mit der socketImageTransfer Funktion :

module.exports.socketImageTransfer = function(socket, type, width, height, name) {

var socketioFileUploadServer    = require('socketio-file-upload');   //upload files by socket
var config                      = require(__dirname + '/config/config.json');
var easyimg                     = require('easyimage');                 //crop - resize image
var fs                          = require('fs');                        //file system access

//Make an instance of socketioFileUploadServer and listen on this socket:
var uploader = new socketioFileUploadServer();
uploader.dir = config.tmpDir;
uploader.listen(socket);

//Do something when a file is saved:
uploader.on('saved', function (event) {

    console.log('Original ' + type + ' saved');

    //resize and rename image with a unique id
    var newName;

    if (!name) {
        newName = Math.random().toString(36).substr(2, 9) + '_' + type + '.png';
    } else {
        newName = name;
    }

    var fileName = event.file.name.replace(//g, '_');

    easyimg.rescrop({src: config.tmpDir + fileName, dst: config.uploadDir + type + '/' + newName, width: width, height: height}, function (err, image) {

        if (err) return console.log(err);

        console.log(type + ' resized and cropped: ' + image.width + ' x ' + image.height);

        //image is uploaded - resized - croped, now display it
        socket.emit('display' + ucfirst(type) + 'Image', {path: '/upload/'+ type + '/' + newName});

        //remove original from file system
        fs.unlink(config.tmpDir + fileName, function () {
            if (err) throw err;
            console.log('Original ' + type + ' removed');
        });

        //additionnal action
        switch(type) {
            case 'icon':
                //send path to generate iconset_json
                socket.emit('setIconsetArray', {iconName: newName});
                break;
        }

    });

});

uploader.on('start', function (event) {
    console.log('Client start upload');
    socket.emit('displayOverlay');
});

//Error handler:
uploader.on('error', function (event) {
    console.log("Error from uploader", event);
});

};

Schätzen Ihre Hilfe

  • Wenn es nichts in der Konsole, Ihre connection handler nicht ausgelöst, weil mindestens undefined sollte in der Konsole. Wahrscheinlich haben Sie einen Fehler in einem anderen Ort zusammen mit einem Fehler, die ich beschrieben habe in meiner Antwort.
  • Dein code scheint zu funktionieren, außer eine Sache: Sie erklären socket, aber pass socket2 zu SocketIOFileUpload Konstruktor.
  • Ja, sorry, In meinem code der name der socket ist " socket2. Aber wie ich schon sagte in Ihrer Antwort, dieser code wird ausgeführt, BEVOR ich das will ... es ist ausgeführt, wenn ich den server starten. Und zu dieser Zeit werden die client-Datei, die Inhalte der socket-code ist ja nicht enthalten...
  • Ich glaube, dass es ausgeführt wird, auf dem server zu starten, weil Sie einen geöffneten Seite in Ihrem browser und Steckdose.IO versucht, Verbindung jede n Sekunden. Wenn der server gestartet, wieder wird erfolgreich und Ihre connection - handler feuert (die in der Regel ausgelöst, wenn die Verbindung zwischen client und server erfolgreich hergestellt). Es ist merkwürdig, dass console.log Ausgänge underfined. Ich versuchte Ihren code, und für mich funktioniert gut mit Buchse.IO 0.9 und 1.0. Können Sie zeigen Sie Ihre vollständigen code, da ich denke, dass das problem an anderer Stelle.
  • Haben Sie versucht, mit sockel.io Datei-upload-Modul ? Vielleicht ist das problem mit diesem Paket ... ich benutze Buchse.io 0.9. Bitte, sehen Sie die post-update. Ich habe den full client - server-code. Ich habe nicht Hinzugefügt, den HTML-Teil. Es ist einfach ein modales Fenster geöffnet mit einem Klick auf ein Bild, das Sie ändern möchten. <a title="Icon Actions" class="icon_actions" data-toggle="modal" href="#icon_action_modal" data-icon="<%= icon %>">. TY für Eure Hilfe
  • Seltsam :/ dieser code funktioniert für mich. Ich kann sehen log input param : my_img_name in meiner Konsole. Werfen Sie einen Blick auf meine server-side-code bei Pastebin. Wahrscheinlich dieser code unterscheidet sich von Ihnen.
  • Durch die Art und Weise, wie Sie dienen /siofu/client.js - Datei?
  • Es ist nur ein EJS Skript in mein layout aus dem Blick. <% script('/siofu/client.js') %> diese Skripts enthalten sind, bevor die </body> schließen-tag. Ich erstellt eine Pastebin post-zeigen Sie die komplette server-Seite. Ty für Ihre Zeit & Ihr helfen
  • Ich bearbeitet meine Antwort. Siehe änderungen unten

InformationsquelleAutor ceadreak | 2014-08-01
Schreibe einen Kommentar