【问题标题】:API request in Node returning errorNode 中的 API 请求返回错误
【发布时间】:2015-06-03 16:55:40
【问题描述】:

我正在使用一些请求参数向 Sphere Engine API 发出一个简单的 http 请求。但是,我无法解释错误。 API规范:http://sphere-engine.com/services/docs/compilers#status

代码:

http = require('http') ;

var info = {
    sourceCode: 'print 3+4',
    language: 4,
    input: ''
} ;

var infoString = JSON.stringify(info);

var options = {
    host: 'api.compilers.sphere-engine.com',
    port: 80,
    path: '/api/v3/submissions?access_token=b11bf50b8a391d4e8560e97fd9d63460',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Content-Length': infoString.length
    }
} ;

var req = http.request(options,function(res) {
    res.setEncoding('utf-8');
    var responseString = '' ;
    res.on('data', function(data) {
        responseString += data ;
    });
    res.on('end', function() {
        var resultObject = JSON.parse(responseString);
    });
} );

req.write(infoString);
req.end();

错误:

undefined:0

^
SyntaxError: Unexpected end of input
    at Object.parse (native)
    at IncomingMessage.<anonymous> (/Users/sarthakmunshi/nodetry.js:29:27)
    at IncomingMessage.emit (events.js:117:20)
    at _stream_readable.js:943:16
    at process._tickCallback (node.js:419:13)

【问题讨论】:

  • 错误只是说 responseString 是 HTML 而不是 JSON。我强烈怀疑这是登录页面。在尝试JSON.parse() 之前,您可以通过打印出 responseString 来获得更好的线索。
  • 我有一个疑问。上面提到的方法是不是类似于带一些参数的 curl 请求。如果没有,我怎样才能做到这一点?
  • res.on('end'..) 内只需打印(console.log)responseString 并注释掉JSON.parse()
  • 我得到一个 json 对象 {"error":"WRONG_LANG_ID"} 。现在我猜这是一个 api 错误!?

标签: node.js rest http


【解决方案1】:

此错误由JSON.parse(responseString); 引起。您得到的响应不是 json 字符串(XML、HTML?),但尝试将其解析为 json。

您可以使用xml-stream 库来解析XML。

【讨论】:

  • 我如何使用它将 xml 转换为 json 。文档有点混乱。
  • 响应不是 XML。它是 HTML。特别是 HTML 2.0,甚至不是 XHTML。将 HTML 解析为 XML 会导致错误,因为 HTML 包含违反 XML 规则的标签
  • @slebetman 可能你是对的,我看不到 API 规范,因为它位于登录页面的后面。显然它不是 JSON。
  • @saru95 这真的很容易。只需创建 xmlStream 对象,为您感兴趣的节点/属性定义回调,并将 http 响应流通过管道传输到其中。
猜你喜欢
  • 2016-09-11
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多