节点js请求主体类型为[Object,Object]

时间:2017-06-22 18:57:16

标签: javascript node.js express

我想使用Node.js中的express和body-parser向服务器发送带有自定义字符串值的请求,但是当我尝试检查发布的值时,我得到以下内容。

  

[object Object]

服务器 -

var express = require('express')
var bodyParser = require('body-parser')
var app = express()
app.use(bodyParser.urlencoded({ extended: true }))
app.post('/', callback)

function callback(req, res) {
  console.log('post/' + req.body)
  res.send('post success!')
}

客户 -

var request = require('request')
request.post({
  url: 'http://127.0.0.1:8000/',
  body: 'testing'
}, function optionalCallback (err, httpResponse, body) {
  if (err) {
    return console.error('upload failed:', err)
  }
  console.log('Upload successful!  Server responded with:', body)
})

客户日志 -

  

上传成功!服务器响应:发布成功!

服务器日志 -

  

发布/ [对象]

如何获取字符串内容"testing"? 谢谢!

5 个答案:

答案 0 :(得分:4)

如果你想在console.log中看到[object Object]内容,请尝试:

const util = require('util');
...
console.log(`post/${util.inspect(req.body,false,null)}`);

更多信息:util.inspect

答案 1 :(得分:3)

您需要通过form data发布 - 通过request[forms] - 会应用相应的application/x-www-form-urlencoded http标头。请注意以下内容......

// -- notice the keyed object being sent
request.post('http://127.0.0.1:8000/', {
  form: {customKey: 'testing'}
}, function (err, httpResponse, body) {

  console.log(body); // post success!
});

在您的终端上,如果您想将其记录下来,则可以这样做......

app.post('/', function (req, res) {

  console.log('post/ ', req.body.customKey'); // -- post/ testing
  res.send('post success!');
});

答案 2 :(得分:1)

我正在使用验证中间件..因此这是一个问题。 验证者是..

BookingBodyValidation: [
    sanitizeBody("*")
      .trim()
      .escape(),
    body("refNo").notEmpty()
  ]

删除此“ sanitizeBody()。trim()。escape()”解决了该问题。

答案 3 :(得分:0)

有人可能会发现这个方便...对于服务器端,我写了一个小的JS片段来解析传入的 req.body 的键/值对(application / x-www -form-urlencoded)并将它们作为有效的JSON对象显示在控制台上:

const util=require('util');let s=util.inspect(req.body)
.split(`Content-Disposition: form-data; name`);s.splice(0,1);
let r=`{"`;s.forEach((e)=>{r+=e.split(`\\r\\n------`)[0]
.replace(`"\\r\\n\\r\\n`,`":"`).replace(`\': \'"`,``)
.replace(`=`,``)+`",`});s=r.slice(0,-1)+`}`;console.log(s);

答案 4 :(得分:0)

最简单的方法是使用console.dir()而不是console.log()。

  

控制台方法dir()显示指定JavaScript对象的属性的交互式列表。输出显示为带有显示三角形的层次结构列表,可让您查看子对象的内容。

     

换句话说,console.dir()是查看所有属性的方式   控制台中指定的JavaScript对象,开发人员可以通过该对象   轻松获取对象的属性。