nodejs - 获取请求 body 就像 php 的 file_get_contents

nodejs - get request body like php's file_get_contents

在我的 nodejs 代码中,我使用 http 模块来获取对用户的 HTTP 请求和响应。我想选 request body,我希望 JSON.

参考this link,我将我的代码应用如下:

var http = require("http")
var server = http.createServer(function(request, response) {

    console.log("method: " + request.method)
    console.log("url: " + request.url)
    console.log("headers: " + request.headers)

    var body = []

    request.on("error", function(error) {

        console.log("Incoming request error: " + error)

    }).on("data", function(chunk) {

        body.push(chunk)

    }).on("end", function() {

        var content = Buffer.concat(body).toString

        console.log("request body: " + content)
        response.end("IP: " + request.connection.remoteAddress + "<br>" + content)

    })

}).listen(PORT, function() {
    console.log((new Date()) + " Server is listening on port " + PORT)
})

我尝试在终端中使用以下命令测试上面的代码:

curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://myserverdomain.com:PORT

但是响应不是我所期望的({"MyKey":"My Value"})!相反,它是一个我不知道它来自哪里的代码片段。见下文:

IP: <MY_IP_ADDRESS><br>function (encoding, start, end) {
  encoding = String(encoding || 'utf8').toLowerCase();

  if (typeof start !== 'number' || start < 0) {
    start = 0;
  } else if (start > this.length) {
    start = this.length;
  }

  if (typeof end !== 'number' || end > this.length) {
    end = this.length;
  } else if (end < 0) {
    end = 0;
  }

  start = start + this.offset;
  end = end + this.offset;

  switch (encoding) {
    case 'hex':
      return this.parent.hexSlice(start, end);

    case 'utf8':
    case 'utf-8':
      return this.parent.utf8Slice(start, end);

    case 'ascii':
      return this.parent.asciiSlice(start, end);

    case 'binary':
      return this.parent.binarySlice(start, end);

    case 'base64':
      return this.parent.base64Slice(start, end);

    case 'ucs2':
    case 'ucs-2':
    case 'utf16le':
    case 'utf-16le':
      return this.parent.ucs2Slice(start, end);

    default:
      throw new TypeError('Unknown encoding: ' + encoding);
  }
}

你能告诉我代码中的问题吗?为什么返回上面的代码片段而不是 {"MyKey":"My Value"}?

非常感谢。

编辑 1:

我刚刚在终端中尝试了更详细的命令,但还是不行。

curl -H "Content-Type: application/json" -X POST -d '{"My key":"My value"}' http://myserverdomain.com:PORT

我刚弄清楚问题所在:var content = Buffer.concat(body).toString!!一定是var content = Buffer.concat(body).toString()!我错过了最重要的部分 ()

谢谢大家