我从回调中获取图像URL,可以成功显示它,但无法将其发送到我正在加载的页面上

时间:2019-01-22 22:14:41

标签: javascript node.js express ejs instagram-api

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);成功返回了我想要的网址,但是,当我尝试将其发送到res.render内部的页面时,没有任何反应,请有人可以帮助我了解原因。

2 个答案:

答案 0 :(得分:0)

res.render(...)回调函数中调用getLatest()

鉴于当前代码,在设置res.render()属性之前执行insta

答案 1 :(得分:0)

Axios与promise一起使用,所以最方便的事情是保持这种形式的工作,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;
  

如果您不知道承诺的运作方式,请留下此链接,以便您可以   阅读和理解。   Promises