【问题标题】:Node.js ERROR: (node:9748) UnhandledPromiseRejectionWarning: Unhandled promise rejectionNode.js 错误:(节点:9748)UnhandledPromiseRejectionWarning:未处理的承诺拒绝
【发布时间】:2018-01-12 11:27:40
【问题描述】:

我正在尝试从 Node.js 中的“噩梦”中获取 json,然后使用 JSON.parse(),但出现以下错误:

(节点:9748)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):SyntaxError:JSON 中位置 18509 的意外令牌☻

我的代码:

var nightmare = Nightmare()
        .goto('URL') 
        .wait(10000) // Need wait some time
        .evaluate(() => {
            return document.body.innerText;
        })
        .end()
        .then((body) => {
            var data;
            try {
                data = JSON.parse(body);
            } catch(e) {
                console.log(e);
            }
            callback(null, data);
        });

【问题讨论】:

  • 问题是什么?
  • 正文不是有效的 json,您不处理错误。就像错误消息所说的那样简单。
  • 这个符号永远不会被 json 读取?我可以从正文中解析☻吗?

标签: json node.js nightmare


【解决方案1】:

您可以使用 JSON.parse 函数来检查 JSON 是否有效。

function validJSON(str) {
  try {
    // try to parse the JSON
    JSON.parse(str);
  } catch (e) {
    // if not a json
    return false;
  }
  // if it's valid json
  return true;
}

它会检查字符串是否是有效的 json。现在,您可以将它与您的 nightmareJS 一起使用。

const nightmare = Nightmare()
  .goto("URL")
  .wait(10000) // Need wait some time
  .evaluate(() => {
    return document.body.innerText;
  })
  .end()
  .then(body => {
    // if it's a valid json, send it, 
    // otherwise send it as a body object
    const data = validJSON(body) ? body : { body };
    callback(null, data);
  });

现在,错误正在显示,因为您对 catch(e)console.log(e) 说该错误。因此它只是服从你的命令。

由于表情符号本身不是有效的 json,因此您必须从中创建一个 json,或者如果它是一个 json 字符串,则对其进行解析。

一个有效的 json 对象可能如下所示,

{emoji:  "☻"}

你明白它是如何被引用的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多