Невозможно установить заголовки в node.js в методе POST - PullRequest
0 голосов
/ 29 июня 2011

У меня есть случай, когда мне нужно прочитать данные из тела запроса, создать файл и записать данные в него. Если операция прошла успешно, я устанавливаю заголовок ответа на 201 и добавляю местоположение файла в заголовок Location. Создание файла выполняется с использованием методов Java, а код node.js приведен ниже.

var server = http.createServer(function(req, res)
    {
        var body = "";
        req.on("data", function(chunk)
        {
            body += chunk.toString();
        }); 

        req.on("end", function() {          
            var rtn = obj.AddonPostMethod(filepath,body);                        
            if(rtn.length < 13)
            {
                res.writeHead(201, {"Location" : rtn});
                res.end();
            }
            else
            {
                res.writeHead(400, {"Content-Type" : application/json"});
                res.write(''+rtn);
                res.end();
            }

        }); 
}});

Проблема в том, что заголовки ответа не обновляются и всегда устанавливаются в заголовки по умолчанию 200 Ok. Кроме того, сервер всегда занят даже после получения ответа.

1 Ответ

0 голосов
/ 29 июня 2011

Я не думаю, что вы на самом деле слушаете порт с кодом, на который вы ссылаетесь.

var http = require('http');
http.createServer(function(req,res){
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');

Вы никогда не объявляете объект http как фактически прослушивающий порт / ip с .listen()function.

Кроме того, вам не нужно ждать, пока объект req испустит что-либо для ответа.Функция вызывается, когда запрос завершен.Вы можете прослушивать конкретные запросы и направлять их соответствующим образом, сохраняя объект http.Server в переменной.

var server = http.createServer();
server.listen(8000);

server.on('request', function(req,res){ /* do something with the request */ });

Дополнительную документацию по объекту http можно найти в документах node.js для http

...