Я использовал jQuery для отправки ajax некоторым данным на веб-сервер nodejs.Получить полезную нагрузку сообщения
Код веб-сервера получает сообщение, но я не знаю, как извлечь полезную нагрузку, а веб-узел документации nodejs просто ужасен. Я попытался сбросить объект запроса на консоль отладчика, но я не вижу данных там. Как получить доступ к полезной нагрузке?
В документации сказано, объект запроса является экземпляром http.IncomingMessage
и выставляет data
событие с подписью function (chunk) { }
где фрагмент является либо строкой или Buffer
, но если вы не знаете, где и как вы должны подключить до этого события, или как использовать буфер, это не очень полезно.
Я заметил, что есть второй, более описательная руководство скрыты под «сообщество», а не по ссылке «DOCS». Это хорошо. В настоящее время он недоступен. Это не так хорошо.
Меня спрашивали, использую ли я фреймворк или пытаюсь сделать это «родным». Незнание мешает мне отвечать прямо, так что вместо этого здесь код
var http = require('http');
var fs = require('fs');
var sys = require('sys');
var formidable = require('formidable');
var util = require('util');
var URL = require('url');
var mimeMap = { htm : "text/html", css : "text/css", json : "application/json" };
var editTemplate = fs.readFileSync("edit.htm").toString();
http.createServer(function (request, response) {
request.addListener('data', function(chunk){
console.log('got a chunk');
});
var body, token, value, mimeType;
var path = URL.parse(request.url).pathname;
console.log(request.method + " " + path);
switch (path) {
case "/getsettings":
try {
mimeType = "application/json";
body = fs.readFileSync("/dummy.json");
} catch(exception) {
console.log(exception.text);
body = exception;
}
//console.log(body.toString());
break;
case "/setsettings":
console.log(request); //dump to debug console
//PROCESS POST HERE
body = ""; //empty response
break;
case "/":
path = "/default.htm";
mimeType = "text/html";
default:
try {
mimeType = mimeMap[path.substring(path.lastIndexOf('.') + 1)];
if (mimeType) {
body = fs.readFileSync(path);
} else {
mimeType = "text/html";
body = "<h1>Error</h1><body>Could not resolve mime type from file extension</body>";
}
} catch (exception) {
mimeType = "text/html";
body = "<h1>404 - not found</h1>";
}
break;
}
response.writeHead(200, {'Content-Type': mimeType});
response.writeHead(200, {'Cache-Control': 'no-cache'});
response.writeHead(200, {'Pragma': 'no-cache'});
response.end(body);
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
Теперь я добавил этот
request.addListener('data', function(chunk){
console.log('got a chunk');
});
к началу функции успеха для createServer. Кажется, это работает так, что, я полагаю, означает, что функция успеха называется до слушателей. Если это не правильное место для привязки, тогда кто-то скажет мне.
Вы используете какой-то веб-фреймворк, такой как экспресс, или пытаетесь ли вы сделать это «родным» способом? –
См. Измененный вопрос –