#javascript #node.js #socket.io
#javascript #node.js #socket.io
Вопрос:
Я создаю приложение для чата, которое требует, чтобы пользователи входили в систему, мне до сих пор удавалось заставить систему входа в систему работать с помощью UserApp.io но, похоже, я не могу найти способ, который отправил бы «Обратный вызов» обратно пользователю, который отправил информацию на сервер.
Итак, для index.html , когда отправляется форма входа, она собирает значения двух полей и отправляет данные на серверную часть.
$('form#login').submit(function() {
var data = {};
data.email = $("#login_email").val();
data.password = $("#login_password").val();
socket.emit('user login', data);
});
В index.js файл, он получает детали и проверяет с помощью UserApp API, что пользователь действителен и все детали верны. Он также извлекает информацию, такую как имя и фамилия.
socket.on('user login', function (user) {
logger.info('Receiving login info for "' user.email '"...');
UserApp.User.login({"login": user.email, "password": user.password}, function (error, result) {
if (error) {
logger.error('Login failed: ' error.message);
} else {
var userToken = result.token;
var userID = result.user_id;
console.log("User has logged in.");
UserApp.User.get({
"user_id": userID
}, function (error, result) {
if (error) {
logger.error(error.message);
} else {
logger.info(result[0]['first_name'] " " result[0]['last_name'] " Has logged in!")
}
});
}
});
});
Итак, вот моя проблема. Кажется, я не могу найти способ выполнить обратный вызов для index.html таким образом, он может показывать ошибки, такие как «Неправильное имя пользователя».
Итак, есть ли способ отправить обратный вызов одному человеку, более конкретно, человеку, который отправил форму входа?
Любая помощь была бы оценена.
Спасибо.
Ответ №1:
сокет.у io есть обратные вызовы с подтверждением, вот документы
http://socket.io/docs/#sending-and-getting-data -(подтверждения)
Добавьте функцию обратного вызова в качестве третьего аргумента при отправке
$('form#login').submit(function() {
var data = {};
data.email = $("#login_email").val();
data.password = $("#login_password").val();
socket.emit('user login', data, function (result) {
console.log(result);
});
});
и тогда функция обратного вызова на стороне сервера может иметь дополнительный параметр, который является обратным вызовом, который вы определили при отправке
socket.on('user login', function (user, callback) {
logger.info('Receiving login info for "' user.email '"...');
UserApp.User.login({"login": user.email, "password": user.password}, function (error, result) {
if (error) {
logger.error('Login failed: ' error.message);
} else {
var userToken = result.token;
var userID = result.user_id;
console.log("User has logged in.");
UserApp.User.get({
"user_id": userID
}, function (error, result) {
if (error) {
logger.error(error.message);
} else {
logger.info(result[0]['first_name'] " " result[0]['last_name'] " Has logged in!")
return callback('your results');
}
});
}
});
});
Комментарии:
1. Да! Кажется, это помогло, большое вам спасибо. Это пригодится не только для этого.