2014-01-26 59 views
2

我正在使用Node.js和请求模块。我正在尝试发出请求API(restfull),但它没有正确发送请求。我可以使这项工作在卷曲和Python的请求模块,但不Node.js的请求模块:Node.js请求模块....发送json在主体中用于放置API请求

var request = require('request'); 

token = 'sfgsfsf'; 

var options = { 
    url: 'https://_rest_full_api 
    headers: { 
     'X-Auth-Token': token 
    }, 
    body: { 
     'status' : 'pending' 
    }, 
    json: true, 
    method: 'put' 
}; 

function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     var info = JSON.parse(body); 
     console.log(info); 
     console.log(info); 
    } else { 
     console.log(response.statusCode); 
     console.log(response.body); 
    } 
} 

request(options, callback); 


SyntaxError: Unexpected token o 
    at Object.parse (native) 
    at Request.callback [as _callback] (/home/one/try.js:19:25) 
    at Request.self.callback (/home/one/node_modules/request/request.js:122:22) 
    at Request.EventEmitter.emit (events.js:98:17) 
    at Request.<anonymous> (/home/one/node_modules/request/request.js:888:14) 
    at Request.EventEmitter.emit (events.js:117:20) 
    at IncomingMessage.<anonymous> (/home/one/node_modules/request/request.js:839:12) 
    at IncomingMessage.EventEmitter.emit (events.js:117:20) 
    at _stream_readable.js:920:16 
    at process._tickCallback (node.js:415:13) 

回答

7

设置为true,请求将被自动解析身体给你的对象JSON选项。您正在重新解析身体这一行:

var info = JSON.parse(body) 

当您尝试解析一个对象,你会得到消息:

$ node 
> var t = {}; 
> JSON.parse(t); 
SyntaxError: Unexpected token o 
+0

谢谢。它怎么没有说'意外的令牌b'(body)而不是意外的令牌o? – dman

+2

因为body是一个包含对象的变量。它试图解析body.toString(),它是'[object Object]'。 –

+0

试试这个:https://www.npmjs.com/package/idempotent-json,如果它们已经被解析过,它不会重新解析对象 –

0
var request = require('request'); 
function updateClient(postData){ 
      var clientServerOptions = { 
       uri: 'http://'+clientHost+''+clientContext, 
       body: JSON.stringify(postData), 
       method: 'PUT', 
       headers: { 
        'Content-Type': 'application/json' 
       } 
      } 
      request(clientServerOptions, function (error, response) { 
       console.log(error,response.body); 
       return; 
      }); 
     } 

在客户端side.And,

var express = require('express'); 
var bodyParser = require('body-parser'); 
var app = express(); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()) 

var port = 9000; 

app.put('/sample/put/data', function(req, res) { 
    console.log('receiving data ...'); 
    console.log('body is ',req.body); 
    res.send(req.body); 
}); 

// start the server 
app.listen(port); 
console.log('Server started! At http://localhost:' + port); 

在服务器端。