Node.js 我需要从JSON对象中嵌套的名为token的字段中解析或提取字符串,以替换会话令牌的电子邮件和密码
我试图创建一个会话身份验证令牌,在用户输入电子邮件和密码后,该令牌可用于后续api调用 下面显示了第一段代码,我收到了200条正确电子邮件和密码的回复,但我收到了一个错误,因为我无法从下面共享的第二段代码中获取“令牌”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
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
。