У меня нет большого опыта работы с Javascript и я после Node.js книги и в нем есть следующий кодКак работает это закрытие?
function start(route, handle)
{
function onRequest(request, response)
{
var postdata='';
var pathname=url.parse(request.url).pathname;
request.setEncoding('utf8');
request.addListener("data", function(postDataChunkd)
{
postdata+=postDataChunkd;
});
console.log('Post data: ' + postdata);// <----------------------- HERE
request.addListener("end", function()
{
route(handle, pathname, response, postdata);
});
}
http.createServer(onRequest).listen(8124);
console.log('Server running on 8124');
}
exports.start=start;
код работает, как ожидалось, однако дело в том, что для меня это кажется бит, неясный, что переменная postData регистрируется как пустая строка в середине addListener («данные» ... и addListener («конец» ...
Может ли кто-нибудь объяснить, почему переменная postData регистрируется пустым, несмотря на успешную запросить?
С уважением
Dan
Первый порядок ведения бизнеса при использовании NodeJS - это знакомство с концепцией асинхронного программирования. Вы добавляете слушателя к событию 'data', и ясно, что это событие еще не произошло, когда запускается' console.log() '. –
... введите регистрацию * внутри * обработчиков событий, и вы получите существенный результат. –
Определенно я обращу больше внимания на асинхронную сторону. Спасибо – user3256539