我想做这样的事情,但这是一个错误,我似乎也无法使用JSON.stringify。有没有办法做到这一点?
var http = require('http')
http.createServer(function(req, res) {
res.end(req);
}).listen(3000);
答案 0 :(得分:4)
从简单的事情开始:
var http = require('http');
http.createServer(function(req, res) {
res.write(req.url);
res.end();
}).listen(3000);
如果您想回显请求,您需要考虑它的哪些部分。 HTTP请求有一个标题和正文。调用处理程序函数时,标头已经可用,但正文是您需要按块读取块的流,然后您可以决定直接将其流式传输,解析,转换或其他任何内容。有很多例子可以开始。
这是一个管道版本。
var http = require('http');
http.createServer(function(req, res) {
req.pipe(res);
}).listen(3000);
我测试它是这样的:
curl -X POST -d 'foo=bar' localhost:3000/hello/foo
foo=bar%
这个版本给了我一些有效的输出,因为它不是JSON格式。如您所见,req
对象有大量内部状态与服务器端编程有关,这与传入HTTP请求的内容无关。因此,获取请求DATA不是正确的方法,这与req
对象编程接口不同。
var util = require('util');
var http = require('http');
http.createServer(function(req, res) {
res.write(util.inspect(req));
res.end();
}).listen(3000);
{ _readableState:
{ highWaterMark: 16384,
buffer: [],
length: 0,
pipes: null,
pipesCount: 0,
....etc
这是一个将请求标头作为JSON发送回来的版本:
var http = require('http');
http.createServer(function(req, res) {
res.setHeader('Content-Type', 'application/json');
res.write(JSON.stringify(req.headers));
res.end();
}).listen(3000);
回复:
curl -v localhost:3000
* Adding handle: conn: 0x7fd983804000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fd983804000) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 3000 (#0)
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 3000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:3000
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Fri, 30 May 2014 00:10:02 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
{"user-agent":"curl/7.30.0","host":"localhost:3000","accept":"*/*"}%