2016-04-11 2 views
0

У меня есть веб-сервер на основе node.js, который работает дома, и я пытаюсь реализовать форму входа.Соберите данные POST асинхронно

Так что в основном мне нужно получить доступ к данным POSTED (логин/пароль). Я нашел это: How do you extract POST data in Node.js? (req.on ('данные' ...) & req.on ('конец' ...))

Но я должен сделать это асинхронно, может кто-то сказать мне, как сделай это ? (мне нужен этот код для блокировки, не неблокируемой)

EDIT: Весь мой код доступен на Github: https://github.com/Fointard/NodeJs/tree/authentication Проблема заключается здесь: https://github.com/Fointard/NodeJs/blob/authentication/js/reqHandlers/auth.js линии 98 и 104, я буду полагаться на «данные 'и' end ', но я хотел бы сделать это асинхронно, чтобы checkID() (строка 95) смог вернуть true или false.

+0

Можете ли вы предоставить код? Что вы делали до сих пор? Вы используете HTTP-сервер узла, выражение или что-то еще? – goenning

+0

Вы говорите, что вам нужно «блокировать», а также «асинхронно». Это не имеет смысла. – goenning

+0

Подождите. Синхронное блокирование и асинхронное неблокирование? Если так, то я плохой, я имел в виду синхронно. – Fointard

ответ

0

Вы не можете. Запросы HTTP - это операции ввода-вывода и всегда будут разрешаться асинхронно. Функция checkID никогда не вернет значение. Вам нужно добавить второй параметр (обычно называемый callback), который будет вызываться с true или false.

function checkID(req, callback) { 
    var body = ''; 
    req.on('data', function (data) { 
    body += data; 
    if (body.length > 1e6) 
     req.connection.destroy(); 
    }); 

    req.on('end', function() { 

    var post = qs.parse(body); 

    if ('loginInputLogin' in post && 'loginInputPassword' in post) { 
     console.log('login : '+post['loginInputLogin']); 
     console.log('password : '+post['loginInputPassword']); 
    } 

    if (post['loginInputLogin'] === 'fointard' && post['loginInputPassword'] === 'f01n') { 
     console.log('ID confirmed'); 

     callback(true); 
    } 

    callback(false); 
    }); 
} 

И использовать его так:

checkID(yourRequest, function(success) { 
    if(success) { 
    //login successfull 
    } else { 
    //login failed 
    } 
}) 
Смежные вопросы