javascript - 我对 API Post 的调用有时似乎不起作用。节点.js
问题描述
因此,例如,如果我想从 API 获取数据,我需要运行一些名为 signon 的 API 来获取唯一令牌,然后使用 unqiue 令牌进行登录以获取登录会话令牌,因此或多或少是这样的顺序:
- 登录(获取唯一令牌/authsalt,用于登录 API)
- 登录(获取 idmitra {用于下一个进程},会话令牌)
- 做其他事情(例如,获取用户数据等)
- 等等。
问题是。代码有时有效,但有时无效
] 1 )
例如在这张图片中,我运行它的前 3 次,它不会从登录过程中获取 idmitra。
我想知道问题出在服务器端还是在它的编码中
这是 index.js 中的编码
const request = require('request');
const crypto = require('crypto');
const baseUrl = "https://linktoAPIserver";
const username = "theuser", password = "thepassword";
async function syncData() {
let authSalt = "", token = "";
return new Promise(resolve => {
// sign on, get auth salt
request.post(baseUrl + '/api/member/signon',
{ form: { devid: '12345678' } },
function (error, response, body) {
if (!error && response.statusCode == 200) {
const data = JSON.parse(body);
// return authsalt for next process
resolve(data.authsalt);
}
})
}).then(salt => {
const hashedPassword = crypto.createHash('sha256').update(password + salt).digest('hex');
// login, get token
return new Promise(resolve => {
request.post(baseUrl + '/api/member/login',
{
form: {
username: username,
password: hashedPassword,
devid: 12345678,
hddinfo: 12345,
isbackend: 1
}
},
function (error, response, body) {
if (!error && response.statusCode == 200) {
const data = JSON.parse(body);
resolve({
idMitra: data.idmitra,
userKey: data.userkey,
// get last 8 character of id mitra
idMitra8: data.idmitra.slice(-8),
});
}
})
});
}).then(userData => {
const trxId = +new Date;
const signature = crypto.createHash('sha256').update(userData.idMitra8 + trxId + userData.userKey).digest('hex');
// get laporan transaksi
return new Promise(resolve => {
request.post(baseUrl + '/api/member/getlaporan',
{
headers: {
sign: signature
},
form: {
idmitra: userData.idMitra,
trxid: trxId,
// TODO : set startDate and endDate as needed
tgl1: '2019-01-01',
tgl2: '2020-03-01',
produk: null
}
},
function (error, response, body) {
if (!error && response.statusCode == 200) {
const data = JSON.parse(body);
console.log(data);
resolve({ trxId, signature });
}
})
});
}).then(authData => {
console.log(authData);
});
}
syncData();
任何形式的帮助将不胜感激
解决方案
推荐阅读
- visual-studio - 如何在不关闭/打开文件的情况下重置 Visual Studio 中的“跟踪更改”?
- php - 如何使用 migrate 创建望远镜
- javascript - 我们如何、何时以及为什么在 react JavaScript 中清理我们的组件?
- reactjs - 我可以在不使用 Apollo 的情况下使用 graphql 进行反应吗?
- c++ - setup() 中的 Arduino 和对象实例化
- excel - Excel 打印到 PDF 到文件夹
- r - 创建一个计数连续变量,根据 POSIXct 日期重置为 1
- rust - 在正确的设计模式上遇到问题
- android-studio - if 语句:赋值不是表达式,在这个上下文中只允许表达式 kotlin
- java - iOS UserDefaults 跨多个应用程序共享首选项 Android 等效项