2017-06-22 97 views
2

我想通过Node.js中的express和body-parser向服务器发送带有自定义字符串值的请求,但是当我尝试检查发布价值。节点js请求正文类型是[对象,对象]

[对象的对象]

服务器 -

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"呢? 谢谢!

+0

将'toString()'从'req.body'中移除。 – gforce301

+1

尝试使用'JSON.stringify',或'console.dir'而不是'.log'? –

回答

1

看起来您需要通过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!'); 
}); 
+0

谢谢。有用 – Deidara

2

如果你想看到的翻译:在执行console.log内容试试这个:

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

更多信息:util.inspect

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);