Я изучаю nodejs и пытаюсь сделать вызов API. API использует JWT для аутентификации.
Я создал эти функции для подписи токена:
function token() {
const payload = {
iat: Math.floor(new Date() / 1000),
exp: Math.floor(new Date() / 1000) + 30,
sub: "api_key_jwt",
iss: "external",
jti: crypto.randomBytes(6).toString("hex")
};
return new Promise((resolve, reject) => {
jwt.sign(payload, privatekey, { algorithm: "RS256" }, function(
err,
token2
) {
if (err) reject(err);
else resolve(token2);
});
});
}
exports.genToken = async function() {
const header = {
"x-api-key": api
};
const data = {
kid: api,
jwt_token: await token()
};
async function authorization(req, res) {
try {
const auth = await rp({
url: authurl,
method: "POST",
headers: header,
body: data
});
res.send(auth.body);
} catch (error) {
res.send(404).send();
}
}
return {
"x-api-key": api,
Authorization: "Bearer " + authorization()
};
};
Это отлично работает. Затем я создал функцию для вызова API:
const token = require("./index").genToken;
const rp = require("request-promise");
exports.getOrderBook = function(res, error) {
const full_url = url + "order_book";
const auth = token();
rp({
url: full_url,
method: "GET",
headers: auth,
body: {
market: "btceur"
},
json: true
})
.then(function(response) {
res(response);
})
.catch(function(err) {
error(err);
});
};
И я называю это, используя Express
:
routes.get("/orderbook", async (req, res, next) => {
try {
const book = await orders.getOrderBook();
res.send(book);
} catch (error) {
next(error);
}
});
Однако, когда я вызываю мой API, в консоли отображается сообщение об ошибке:
TypeError [ERR_INVALID_ARG_TYPE]: первый аргумент должен быть одним из
введите строку или буфер. Полученный тип объекта.
Я предполагаю, что ошибка связана с генерацией токена, потому что если я console.log(auth)
в функции getOrderBook
, он показывает Promise { <pending> }
, поэтому, вероятно, объект передается как токен jwt.
Это действительно проблема? Я перепробовал много разных решений, которые нашел в интернете, однако концепция Async/Await
для меня нова, и у меня возникли некоторые проблемы, чтобы понять это.
Заранее большое спасибо, ребята!