Я получаю URL-адрес изображения от обратного вызова и могу успешно отобразить его, но не могу отправить его на страницу, которую я загружаю - PullRequest
0 голосов
/ 23 января 2019
const express = require('express');
const router = express.Router();
const axios = require('axios');

/* GET home page. */
router.get('/', (req, res, next)=> {
  let instaPost;

  getLatest(callback => {
    instaPost = callback;
    console.log(instaPost);

  });

  res.render('index', {
    title: 'Home',
    insta: instaPost
  });
});

function getLatest(callback) {
  axios.get('https://api.instagram.com/v1/users/self/media/recent/?access_token=xxx&count=1')
    .then(response => {
      callback((response.data.data[0].link));
    })
    .catch(error => {
      callback(error);
    });

}



module.exports = router;

console.log (instaPost);успешно возвращает URL-адрес, который я хочу, однако, когда я пытаюсь отправить его на страницу внутри res.render, ничего не происходит, пожалуйста, кто-нибудь может помочь мне понять, почему.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Axios работает с обещаниями, поэтому удобнее всего сохранять эту форму работы, метод GET является асинхронным, так как вы можете получить необходимое значение.

const express = require('express');
const router = express.Router();
const axios = require('axios');

/* GET home page. */
router.get('/', (req, res, next) => {
    getLatest().then((instaPost) => {
        res.render('index', {
            title: 'Home',
            insta: instaPost
        });
    });
});

function getLatest() {
    return axios.get('https://api.instagram.com/v1/users/self/media/recent/?access_token=xxx&count=1')
        .then(response => {
            return Promise.resolve(response.data.data[0].link);
        })
        .catch(error => {
            return Promise.reject(error);
        });
}



module.exports = router;

Если вы не знаете, как работают обещания, я оставлю эту ссылку, чтобы вы могли читать и понимать. Обещания .

0 голосов
/ 23 января 2019

Вызов res.render(...) внутри функции обратного вызова getLatest().

Учитывая текущий код, res.render() выполняется до установки свойства insta.

...