socket.io / paramètres de connexion
Dans mon node.js /Express.js app, j'ai besoin de passer des paramètres avec le support.io connexion (vu dans un autre post).
Sur le côté client, j'ai quelque chose comme :
modifier
var socket = io.connect('/image/change', {query:"name=my_img_name"});
var siofu = new SocketIOFileUpload(socket);
siofu.listenOnInput(document.getElementById("change_image_inpt"));
Sur le côté serveur :
modifier
io.of('/image/change')
.on('connection', function (socket) {
console.log('log input param : ' + socket.handshake.query.name);
});
Mais rien dans la console.
Est-il un autre moyen pour y parvenir ?
edit2
C'est le code complet pour le 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
Et le code complet pour le côté serveur :
io.of('/icon_sets/change')
.on('connection', function (socket) {
console.log('log input param : ' + socket.handshake.query.name);
functions.socketImageTransfer(socket, 'icon', 65, 65);
});
Avec le socketImageTransfer
fonction :
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);
});
};
Remercie de votre aide
Si il n'y a rien dans la console, votre
Votre code semble fonctionner sauf une chose: vous déclarez
Oui, désolé, Dans mon code le vrai nom de la socket est " socket2. Mais comme je l'ai dit dans votre réponse, ce code est exécuté AVANT que je veux ... c'est exécutée lorsque je démarre le serveur. Et à ce moment, le fichier client qui contenu le code socket n'est pas oui...
Je crois qu'il est exécuté sur le serveur de commencer parce que vous avez une page ouverte dans votre navigateur, et de la Prise.IO essaie de se reconnecter à chaque
Avez-vous essayé avec la prise.io upload de fichier du module ? Peut-être que le problème est avec ce paquet ... je utiliser socket.io 0.9. S'il vous plaît, voir le post de mise à jour. J'ai ajouté le client - serveur de code. Je n'ai pas ajouté la partie HTML. C'est juste une fenêtre modale ouvert par un clic sur une image que vous souhaitez modifier.
connection
gestionnaire ne pas le feu à tous, parce qu'au moins undefined
devrait être dans la console. Vous avez probablement une erreur dans un autre lieu avec un message d'erreur que j'ai décrit dans ma réponse.Votre code semble fonctionner sauf une chose: vous déclarez
socket
, mais passer socket2
à SocketIOFileUpload
constructeur.Oui, désolé, Dans mon code le vrai nom de la socket est " socket2. Mais comme je l'ai dit dans votre réponse, ce code est exécuté AVANT que je veux ... c'est exécutée lorsque je démarre le serveur. Et à ce moment, le fichier client qui contenu le code socket n'est pas oui...
Je crois qu'il est exécuté sur le serveur de commencer parce que vous avez une page ouverte dans votre navigateur, et de la Prise.IO essaie de se reconnecter à chaque
n
secondes. Lorsque le serveur est démarré, rebranchez devient un succès et votre connection
gestionnaire des feux (qui généralement se déclenche lorsque la connexion entre le client et le serveur est établie avec succès). Il est étrange que console.log
sorties underfined
. J'ai essayé votre code et pour moi fonctionne très bien avec les deux Socket.IO 0.9 et 1.0. Pouvez-vous montrer votre code, parce que je pense que le problème est dans un autre endroit.Avez-vous essayé avec la prise.io upload de fichier du module ? Peut-être que le problème est avec ce paquet ... je utiliser socket.io 0.9. S'il vous plaît, voir le post de mise à jour. J'ai ajouté le client - serveur de code. Je n'ai pas ajouté la partie HTML. C'est juste une fenêtre modale ouvert par un clic sur une image que vous souhaitez modifier.
<a title="Icon Actions" class="icon_actions" data-toggle="modal" href="#icon_action_modal" data-icon="<%= icon %>">
. TY pour votre aide
OriginalL'auteur ceadreak | 2014-08-01
Vous devez vous connecter pour publier un commentaire.
Oui, il est.
1)
query
est commeGET
paramètres, afin de remplacer"param:value"
avec"param=value"
(si vous voulez passer plusieurs paramètres, le faire comme vous le faites habituellement avec l'URL:param=value&some_other_param=test
)2) Il est plus facile et plus fiable (car il n'y a pas de risque pour l'accès à une propriété non définie de
handshaken
objet) pour obtenir le paramètre de requête à l'intérieur deconnection
gestionnaire:Edit:
Après l'apprentissage de votre code complet je suppose que j'ai compris ce qui provoque le problème. Le problème, c'est que vous êtes probablement mal compris l'idée principale de la Prise.IO espaces de noms.
Je suppose que vous avez Prise multiple.IO connexions (
io.connect
appels) au sein d'une page, à droite? Habituellement, une seule connexion suffit. Votre erreur, c'est que vous appelezio.connect
sur événement de souris, mais vous devriez appeler une fois surdocument.ready
, et puis justeemit
ting.Regardez le code suivant (côté client):
Côté serveur code:
Si vous avez un espace de noms, il doit travailler. Je ne sais pas réellement si c'était un bug de la Prise.IO ou à la suite d'une mauvaise utilisation des espaces de noms, mais de modifier le code pour faire un seul espace de noms devrait faire l'affaire.
Donc dans votre cas vous n'avez pas à passer les paramètres de la requête lorsque la poignée de main à tous.en Fait, vous devez utiliser le paramètre de requête si vous voulez rendre votre application plus sûre. Voir http://wlkns.co/node-js/socket-io-authentication-tutorial-server-and-client/ (pour la Socket.io 0.9)Espère que ma réponse vous aide. Bonne chance!
log input param : undefined
mais, à ce moment, je n'ai pas de charger une nouvelle image ... s'il vous Plaît, voir mon post de mise à jour. Ty d'avance pour votre aide+1 ! Ty pour votre temps et votre réponse complète. Votre solution était mon deuxième choix si le
query
paramètre n'a pas de travail. Je vais aller dans cette direction. TY CuriousGuy !vous êtes les bienvenus 🙂
mon erreur.
socket
est un'connection'
fonction de gestionnaire d'argument. édité ma réponse. merci 🙂merci, je ne suis plus Curieux à ce sujet. ha.
OriginalL'auteur Oleg
Voici ce que j'ai fait.
Client
Serveur
C'est comment il devrait être. Génial (Y)
OriginalL'auteur Marlon Bernal