2013-02-03 3 views
2

Я сейчас переживаю книгу Гильермо Раукса «Smashing Node.Js». Я застрял в главе 7, где задача состоит в том, чтобы настроить клиент/сервер и отправить строку с клиента на сервер через http-соединение. Строка должна быть напечатана с сервера.Выполнение HTTP-запросов и отправка тела данных в node.js

код клиента:

var http = require('http'), qs = require('querystring'); 

function send (theName) { 
    http.request({ 
     host: '127.0.0.1' 
     , port: 3000 
     , url: '/' 
     , method: 'GET' 
    }, function (res) { 
     res.setEncoding('utf-8'); 
     res.on('end', function() { 
      console.log('\n \033[090m request complete!\033[39m'); 
      process.stdout.write('\n your name: '); 
     }) 
    }).end(qs.stringify({ name: theName})); 
} 

process.stdout.write('\n your name: '); 
process.stdin.resume(); 
process.stdin.setEncoding('utf-8'); 
process.stdin.on('data', function (name) { 
    send(name.replace('\n', '')); 
}); 

сервер:

var http = require('http'); 
var qs = require('querystring'); 

http.createServer(function (req, res) { 
    var body = ''; 
    req.on('data', function (chunk) { 
     body += chunk; 
    }); 
    req.on('end', function() { 
     res.writeHead(200); 
     res.end('Done'); 
     console.log('\n got name \033[90m' + qs.parse(body).name + '\033[39m\n'); 
    }); 

}).listen(3000); 

Я запустить клиент и сервер. Клиент, кажется, работает:

[email protected]:~/nodejs/tweet-client$ node client.js 

your name: mles 

    request complete! 

your name: 

Однако на стороне сервера, он показывает только неопределенная:

[email protected]:~/nodejs/tweet-client$ node server.js 

got name undefined 

Согласно книге, здесь должно быть «ОМП» тоже.

ответ

3
, method: 'GET' 

должен быть

, method: 'POST' 

запросы GET не имеют тела, поэтому нет ничего разобрать на стороне сервера.

+0

Спецификация здесь несколько смутная, но я думаю, что вы правы в этом узле, не позволяйте телу с GET. – Joe

+1

@ Joe Достаточно. Я не знаю, является ли клиент, который не отправляет данные с GET или сервером, который игнорирует данные для GET, но использование POST определенно исправляет его. – loganfsmyth

+0

Да. В этом случае события «нет» («данные») даже не срабатывают. – Joe

Смежные вопросы