Есть ли способ, чтобы излучать к текущему socket
внутри метода пост node.js с использованием Socket.io и выразить без необходимости проходить через io.sockets.on('connection')
?Использование .emit от POST
Вот моя проблема. Я делаю мини-систему авторизации. Когда пользователь отправляется из формы, он отправляет данные через '/login'
вместо использования onclick
. Если у пользователя есть недопустимое имя пользователя или пароль, он должен отправить сообщение с уведомлением об ошибке. Я бы предпочел не использовать обратный вызов или написать, потому что я использую шаблон Jade. Вы можете увидеть мой исходный код here.
Пример: Server Side
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);
}
});
});
Пример Client Side
JS
var status = document.getElementById('status');
socket.on('loginFail', function(msg) {
status.innerHTML = msg;
});
Джейд Форма
#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')
Вместо использования res.emit вы пытались использовать сокет, который был инициализирован на сервере? Пример: 'socket.emit ('loginFail', 'Can not log in');' Также я не знаю, можете ли вы использовать сокеты для этого, поскольку клиенту все равно нужно будет подключиться после рендеринга страницы, в которой они пропустит излучение. Есть ли причина, по которой вы не можете сделать что-то вроде этого: res.render ('login', {error: 'Invalid credentials'}) ;, а затем отобразить статус, если он существует – JasonM
Я даже не думал попробовать и передать данные с методом рендеринга. Jade и Node.js по-прежнему новинка для меня, поэтому я очень ценю совет. –