我尝试了许多不同的模块和方法。 即使通过证明其他模块在Node中按预期工作,也可以通过构建单独的测试项目并单独测试每个模块来实现。
Posting FROM Node's hosted router to a remote API (not TO Node's hosted API)
此问题不是向API发送数据的问题。它必须IMO接收API中的一个问题是不要放弃它因某种原因而接收的数据。
我已经证明PUT或POST呼叫是通过将呼叫发送到http://httpbin/org来发送数据的。该网站向我显示我正在发送我希望发送的内容。
这是我发送的方式。我甚至可以在接收API中看到该API已成功调用。
- 发送 - ((再次。这显示我的node.http尝试。但我使用requestjs,requestifyjs,needlejs得到同样的问题))
router.get('/', function (req, res, next) {
var hst = req.headers.host.split(':');
var lookbackURL = 'https://' + req.headers.host + req.baseUrl;
lookbackURL = 'http"httpbin.org/put';
var dat = {
what: 'ever'
, try: 'again'
};
var bdy = JSON.stringify(dat);
var options = {
host: hst[0], port: hst[1], path: req.baseUrl, method: 'PUT'
, headers: { 'Content-Type': 'application/json' }
};
var r = nodeHttp.request(options); r.write(bdy); r.end();
res.sendStatus(200);
});
- 收到 -
router.put('/', function (req, res, next) {
console.log('r', req);
});
无论我使用哪种模块或方法,在所有情况下,接收req
对象都不包含what
或try
数据。
但在我的测试项目中,数据就像我预期的那样,在所有情况下都是如此。
在测试项目中执行相同的console.log(req);
,reqestjs,requestjs,needlejs,node.http都显示正确的body对象。
但在这个问题中,req
中没有身体对象。
将此put / post发送到http://httpbin.org我可以看到正在发送正文对象。
有什么想法吗?
答案 0 :(得分:0)
发现问题。这是我发布的代码中没有人可以获得的东西。
由于我不会涉及的原因,我必须从body-parser
取出这个申请。这也意味着app.use()不会给它一个解析器。
这意味着我必须自己处理数据。所以我添加了一个req.on('data')监听器来读取API调用中的块。
router.put('/', function (req, res, next) {
var data = '';
req.on('data', function (chunk) {
data += chunk;
.....
});
.....
我还决定使用Requestify作为PUT。
这只是表明变得自满并忘记事情真正起作用是多么容易;例如,body-parser
(或其他事物)的假设总是在那里。或者它真正为你做了什么。
NEXT我必须弄清楚如何从`req.on('data)中获取一个值,返回到PUTIT到API的方法。任何提示?赞赏。