Ошибка типа: не удается прочитать свойство ‘access_token’ неопределенного

#javascript #node.js #express

#javascript #node.js #выразить

Вопрос:

Я создаю веб-сайт discord bot dashboard с помощью express, и я получаю эту ошибку, но, похоже, могу ее исправить: TypeError: не удается прочитать свойство ‘access_token’ неопределенного значения. Когда я запускаю код, все полностью работает, но ошибка все еще появляется.

Это вся моя страница:

 
const router = express.Router();
const OAuthClient = require('disco-oauth');
const AuthClient = new OAuthClient(
    '732404499209256980',
    'bqX8W8RXQl-lqgbjxVqys7dlRcUzUZAk'
);
const inviteURL ='https://discord.com/oauth2/authorize?client_id=732404499209256980amp;permissions=2147479255amp;scope=bot',
    loginURL = `https://discord.com/api/oauth2/authorize?client_id=732404499209256980amp;redirect_uri=https://valbot-testing.valblaze.repl.co/authamp;response_type=codeamp;scope=identify guilds`;

AuthClient.setRedirect(`https://valbot-testing.valblaze.repl.co/auth`);
AuthClient.setScopes('identify', 'guilds');

router.use(async (req, res, next) => {
    const key = req.cookies.get('key');

  res.locals.user = await AuthClient.getUser(key);

  next();
});

router.get('/', (req, res) => res.render('home'));

router.get('/dashboard', (req, res) => {
    res.render('dashboard/index');
});

router.get('/invite', (req, res) => res.redirect(inviteURL));
router.get('/login', (req, res) => res.redirect(loginURL));
router.get('/auth', async (req, res) => {
    const key = await AuthClient.getAccess(req.query.code);
    res.cookies.set('key', key);

    res.redirect('/dashboard');
});

router.get('*', (req, res) => res.render(`errors/404.pug`));

module.exports = router;
  

но, похоже, это код, нарушающий его:

     const key = req.cookies.get('key');

  res.locals.user = await AuthClient.getUser(key);
  

всякий раз, когда я вызываю await AuthClient.getUser(key) его breaks, и я пытался записать ключ в консоль, он работает нормально, как обычный ключ.

Есть ли что-нибудь, чего мне не хватает?

Ответ №1:

Происходит то, что файл cookie ‘key’ может присутствовать не всегда, особенно если вы еще не вошли в систему. По этой причине вы должны защитить код таким образом:

 const key = req.cookies.get('key');
res.locals.user = key ? await AuthClient.getUser(key) : null;