Est-il possible d'émettre à l'socket
courant dans une méthode post de Node.js utilisant socket.io et exprimer sans avoir à passer par le io.sockets.on('connection')
?En utilisant .emit de POST
Voici ma question. Je fais un mini système d'autorisation. Lorsque l'utilisateur soumet à partir du formulaire, il publie les données via '/login'
au lieu d'utiliser un onclick
émettre. Si l'utilisateur a un nom d'utilisateur ou un mot de passe invalide, il doit envoyer un message indiquant qu'il a échoué. Je préférerais ne pas utiliser le callback ou écrire car j'utilise un template Jade. Vous pouvez voir mon code source here.
Exemple: côté serveur
var LoggIn = require('./lib/login.js'); // <-- Middle-ware
app.post('/login', function (req, res){
LoggIn.authenticate(req.body.user, req.body.password, function(user, msg) {
if (user) {
req.session.user = user;
res.redirect('/');
} else {
res.render('login');
//res.emit('loginFail', 'You have entered an invalid user/password!<br>Try Again.); // <-- wishing for something like this
console.log('Login Failed! : ' + msg);
}
});
});
Exemple côté client
JS
var status = document.getElementById('status');
socket.on('loginFail', function(msg) {
status.innerHTML = msg;
});
Form Jade
#status
form#loginForm(method='POST', action='/login')
input(name='user', placeholder='User Name')
br
input(name='password', placeholder='Password', type='password')
br
input(value='Sign In', type='submit')
Au lieu d'utiliser res.emit, avez-vous essayé d'utiliser le socket qui a été initialisé sur le serveur? Exemple: 'socket.emit ('loginFail', 'Can not log in');' Aussi je ne sais pas si vous pouvez utiliser des sockets pour cela car le client aurait encore besoin de se connecter après le rendu de la page, dans lequel ils manquerait l'émission. Y at-il une raison pour laquelle vous ne pouvez pas faire quelque chose comme ceci 'res.render ('login', {error: 'Invalid credentials'});' et ensuite afficher le statut s'il existe – JasonM
Je n'ai même jamais pensé essayer et passer le des données avec la méthode de rendu. Jade et Node.js sont encore assez nouveaux pour moi alors j'apprécie vraiment le conseil. –