#node.js
#node.js
Вопрос:
Возникает очень, очень своеобразная проблема:
Когда я запускаю свое приложение node, я устанавливаю свои токены доступа к экземпляру модели следующим образом:
index.js
const token = new Tokens();
token.setTokens(access_token, refresh_token);
console.log(token.getTokens()) // WORKS
Затем я вызываю функции получения в моем экземпляре в разных файлах.
RunSchedular.js
const tokens = Tokens.getInstance();
console.log('sched',tokens.getTokens()) //WORKS
API.js
export const POSTRequest = () => {
const currentTokens = Tokens.getInstance();
const refreshToken = currentTokens.getRefreshToken(); // DOES NOT WORK
const body = {
method: 'POST',
headers:
{
"Content-Type": "application/x-www-form-urlencoded",
"Cache-Control": "no-cache"
},
body: qs.stringify({
client_secret: clientSecret,
client_id: clientId,
refresh_token: refreshToken,
grant_type: 'refresh_token',
redirect_uri: redirectUri
})
};
return body;
}
Моя модель выглядит так:
let instance = null;
export default class Tokens {
constructor() {
if(!instance) {
instance = this;
}
this.accessToken = '';
this.refreshToken = '';
}
getAccessToken() {
return this.accessToken;
}
setAccessToken(value) {
this.accessToken = value;
}
getRefreshToken() {
return this.refreshToken;
}
setRefreshToken(value) {
this.refreshToken = value;
}
getTokens() {
return {
accessToken: this.accessToken,
refreshToken: this.refreshToken
}
}
setTokens(accessToken,refreshToken) {
this.accessToken = accessToken;
this.refreshToken = refreshToken;
}
static getInstance() {
console.log('instance', instance)
if(!instance) {
instance = new Tokens();
}
return instance;
}
};
Есть идеи, почему это может происходить? Экземпляр в API.js не возвращает мои токены доступа (токен доступа = » согласно конструктору), где в качестве schedular.js и index.js возвращает мой токен доступа нормально?
Моя модель неверна?
Комментарии:
1. Когда вы вызываете
Tokens.getInstance();
POSTRequest
функцию, журналconsole.log('instance', instance)
печатает то, что вы ожидаете, или не определено?2. @Molda он возвращает обратно ‘null’
3. Только что заметил
const refreshToken = currentTokens.getTokens();
, что это неправильно. getTokens возвращает объект, поэтому он должен бытьconst refreshToken = currentTokens.getRefreshToken()
4. Извините, был отредактирован код. Изменили его обратно. Однако все та же проблема. Как будто он полностью сбрасывается, потому что, когда я регистрирую токен доступа и обновляю токен в консоли, API.js , они пустые (как конструктор hte), а экземпляр равен null.
Ответ №1:
Как вы импортируете Tokens
модуль? Если путь отличается, будут импортированы 2 разных модуля.
Например, Г.:
import { Tokens } from 'src/singletons/Tokens';
Будет другим объектом, чем:
import { Tokens } from './../singletons/Tokens';
Комментарии:
1. проблема с учетом регистра при импорте вызвала проблему — такая ошибка новичка
2. Не беспокойтесь, некоторое время назад я несколько часов сталкивался с одной и той же проблемой. Ужасная нишевая функциональность в javascript: (
3. Спасибо! В документации NodeJS есть небольшой раздел, посвященный этому , но эта функциональность имеет большое влияние.