Я сейчас переживаю книгу Гильермо Раукса «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
Согласно книге, здесь должно быть «ОМП» тоже.
Спецификация здесь несколько смутная, но я думаю, что вы правы в этом узле, не позволяйте телу с GET. – Joe
@ Joe Достаточно. Я не знаю, является ли клиент, который не отправляет данные с GET или сервером, который игнорирует данные для GET, но использование POST определенно исправляет его. – loganfsmyth
Да. В этом случае события «нет» («данные») даже не срабатывают. – Joe