Node.js 我需要从JSON对象中嵌套的名为token的字段中解析或提取字符串,以替换会话令牌的电子邮件和密码

Node.js 我需要从JSON对象中嵌套的名为token的字段中解析或提取字符串,以替换会话令牌的电子邮件和密码,node.js,json,authentication,zapier,Node.js,Json,Authentication,Zapier,我试图创建一个会话身份验证令牌,在用户输入电子邮件和密码后,该令牌可用于后续api调用 下面显示了第一段代码,我收到了200条正确电子邮件和密码的回复,但我收到了一个错误,因为我无法从下面共享的第二段代码中获取“令牌” const options = { url: 'https://api.knack.com/v1/applications/5e159b77ed2cc100162fae1f/session', method: 'POST', headers: { 'conte

我试图创建一个会话身份验证令牌,在用户输入电子邮件和密码后,该令牌可用于后续api调用

下面显示了第一段代码,我收到了200条正确电子邮件和密码的回复,但我收到了一个错误,因为我无法从下面共享的第二段代码中获取“令牌”

const options = {
  url: 'https://api.knack.com/v1/applications/5e159b77ed2cc100162fae1f/session',
  method: 'POST',
  headers: {
    'content-type': 'application/json',
    'Knack-Application-Id': '5e159b77ed2cc100162fae1f',
    'email': bundle.authData.email,
    'password': bundle.authData.password
  },
  params: {
     'email': bundle.authData.email,
    'password': bundle.authData.password

  },
  body: {
    'email': bundle.authData.email,
    'password': bundle.authData.password

  }
}

return z.request(options)
  .then((response) => {
    response.throwForStatus();
    const results = z.JSON.parse(response.content.token);
    //const token = z.JSON.parse(reponse.content.token)
   // const token=

    // You can do any parsing you need for results here before returning them

    return {
      'sessionKey': results.token
    };
  });
上面的响应成功地验证了一个200响应,并提供了一个JSON对象,其中包含用户配置文件信息和我需要获取的令牌。我无法从JSON响应中获取必要的字符串(因为我是noob),如下所示:

// Data returned by remote login request
{
  "session": {
    "user": {
      "approval_status": "approved",
      "empty_pass": false,
      "id": "user_id",
      "profile_keys": [
        "profile_4"
      ],
      "profile_objects": [
        {
          "entry_id": "entry_id",
          "object": "object_4"
        }
      ],
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTUzMWExNmI2YTEzMTk1ZTcyNmUxZTBmIiwiYXBwbGljYXYpb25faWQiOiI1NTIzMTM5ZjNiY2U2NDdhMDJiZDUxNTAiLCJpYXQiOjE0Mjk3MTgzNzl9.K-WULiJxT-st8vxnTkqxCtp2nv5ykrSToPQsTRx6r1I",
      "utility_key": "key",
      "values": {}
    }
  }
}
我需要从“令牌”字段获取字符串


如果可以的话,请告诉我怎么走?

感谢您发布
响应
变量的内容!如果这是您要返回的对象,您应该能够使用以下代码访问
令牌
字段:

const response = {
  "session": {
    "user": {
      "approval_status": "approved",
      "empty_pass": false,
      "id": "user_id",
      "profile_keys": [
        "profile_4"
      ],
      "profile_objects": [
        {
          "entry_id": "entry_id",
          "object": "object_4"
        }
      ],
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTUzMWExNmI2YTEzMTk1ZTcyNmUxZTBmIiwiYXBwbGljYXYpb25faWQiOiI1NTIzMTM5ZjNiY2U2NDdhMDJiZDUxNTAiLCJpYXQiOjE0Mjk3MTgzNzl9.K-WULiJxT-st8vxnTkqxCtp2nv5ykrSToPQsTRx6r1I",
      "utility_key": "key",
      "values": {}
    }
  }
}

console.log(response.session.user.token);
eyJ0eXAiOiJK...
您可以使用
引用JavaScript对象使用的键。因此,如果您的变量是
response
,则可以使用
response.session
在其内部获取
session
对象,也可以使用
response.session.user
session
内部获取
user
对象

但是,首先,您可能希望将
块的内容更改为以下内容:

    response.throwForStatus();
    const results = z.JSON.parse(response);

    return {
      'sessionKey': results.session.user.token
    };
parse
函数将响应数据转换为JavaScript可以本地使用的数据。如果
response
具有上面引用的格式,则可以使用该点表示法获取每个内部对象。第一个示例是传递似乎不存在的
response.content.token
。尝试使用
response
,看看这是否能让你更接近

此页面可能会为您提供更多上下文,以帮助您梳理出响应对象中的一些字段:


祝你好运

嗨,谢谢你的回复!我尝试使用“console.log(response.session.user.token);”它说response未定义。我还在Zapier上的用例中尝试了它,它说:收到的内容“{”会话“{”用户“{”id“:“5e159b7a6e933c7c6139454c”,“值“{”字段7:[“profile_4”,“profile_5”,“pr”“无法读取未定义控制台日志的属性‘user’:Oops,感谢您的澄清!我已编辑了上面的答案以提供更多上下文。请尝试将
z.JSON.parse(response.content.token)
替换为
z.JSON.parse(response)
'sessionKey':results.token
'sessionKey':results.session.user.token
并查看是否有效。再次感谢,我收到了用于初始身份验证的响应200,现在我抛出了一个新错误:{“id”:“5e159b7a6e933c7c6139454c”,“value”:{“field_7”:[“profile_4”,“profile_5”,“pr”错误解析响应。“[object object]”不是字符串。控制台日志:如果它在同一代码中崩溃,我的最佳猜测是您实际上不需要使用
z.JSON.parse
。您可以尝试省略读取
const results=z.JSON.parse(响应)的行
并将
'sessionKey':results.session.user.token
更改为
'sessionKey':response.session.user.token