【问题标题】:I keep getting 'Undefined: 1' Error in Node.js when trying to call a webAPI尝试调用 webAPI 时,Node.js 中不断出现“未定义:1”错误
【发布时间】:2018-01-12 21:43:57
【问题描述】:

我目前正在编写一些代码来读取 WebAPI。

C:\Users\XXXX\XXXX\XXXX>node bot.js 未定义:1

SyntaxError: JSON 输入意外结束

at Object.parse (native)

at IncomingMessage.<anonymous> (C:\Users\XXXX\XXXX\XXXX\bot.js:82:20)

at emitNone (events.js:91:20)

at IncomingMessage.emit (events.js:185:7)

at endReadableNT (_stream_readable.js:974:12)

at _combinedTickCallback (internal/process/next_tick.js:80:11)

at process._tickCallback (internal/process/next_tick.js:104:9)

这是我的代码

var http = require('http');

var options = {
    host: 'backpack.tf',
    port: 80,
    path: '/api/IGetPrices/v4?key="personalapikey"',
    method: 'GET'
};

http.request(options, function(res){
    var body = '';

    res.on('data', function(chunk){
        body+=chunk;
    });

    res.on('end', function(){
        var price = JSON.parse(body);
        console.log(price);
    });
}).end();

我对 node.js 和一般编码非常陌生。但我已经尝试过其他 3 种方法来尝试让它发挥作用。我没有想法

【问题讨论】:

  • 请格式化您的代码,它真的很难阅读。
  • 无论如何,res.on('end' 回调中的问题,body 是无效的 json。
  • 我重新格式化了,你能解释一下这是什么意思吗?
  • 这意味着 body 不是有效的 json 字符串(结构不正确或字符无效)。在var price = JSON.parse(body); 之前添加console.log(body); 并查看控制台输出。
  • 只检查正文包含的内容,可能是一些错误消息,由于某种原因不是 JSON ...

标签: javascript node.js asp.net-web-api


【解决方案1】:

您可以尝试将以下内容添加到您的代码中以使其更加健壮和防错,检查响应代码,检查正文是否为空,将正文打印到日志以确保它是有效的 JSON,并在 try catch 中解析正文,以防 API 以无效的 JSON 响应。

var http = require('http');

var options = {
    host: 'backpack.tf',
    port: 80,
    path: '/api/IGetPrices/v4?key="personalapikey"',
    method: 'GET'
};

http.request(options, function(res){
    var body = '';

    res.on('data', function(chunk){
        body+=chunk;
    });

    res.on('end', function(){
        if (res.statusCode == 200) { // Check the status code returned in the response
            try { // Add try catch block to handle corrupted json in response
                if (body != '') { // Check that the body isn't empty
                    console.log(body); // Print the body to check if it's actually a valid JSON
                    var price = JSON.parse(body);
                    console.log(price);
                } else {
                    console.log('Body is empty');
                }
            } catch (err) {
                console.log(err);
            }
        } else {
            console.log('Status code: ' + res.statusCode);
        }
    });
}).end();

【讨论】:

  • 它修复了错误!输出为“301”
  • 作为后续问题,我将如何将 API 中的信息写入新的 .json?
  • 如果你的意思是把它解析成 js int 你可以使用:var price = parseInt(body); 如果你想把它包装在一个 js 对象中你可以写var obj = {price: parseInt(body)};
  • 我希望代码创建一个新的 .json 文件,其中包含网页中的所有数据。我猜我会使用 js.writeFile 之类的东西 编辑:当尝试记录“价格”时,它返回“未定义”
  • 您可以使用fs 库将数据直接写入文件。如果将其保存为 JSON 很重要,则需要先创建对象,然后可以使用 JSON.stringify 将对象转换为 JSON 字符串。
猜你喜欢
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2020-12-14
相关资源
最近更新 更多