【问题标题】:I'm getting an image URL from a callback and I can successfully display it, but I cannot send it to the page I am loading我从回调中获取图像 URL,我可以成功显示它,但我无法将它发送到我正在加载的页面
【发布时间】:2019-01-22 22:14:40
【问题描述】:
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 中的页面时,没有任何内容,请有人帮我理解为什么。

【问题讨论】:

  • 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    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;
    

    如果你不知道 Promise 是如何工作的,我留下这个链接,这样你就可以 阅读并理解。 Promises.

    【讨论】:

    • 谢谢!我意识到我可以在 router.get 中进行整个 api 调用,而无需定义回调:)
    • @HenryPenton 是的,您可以这样做并利用提供 axios 的函数,但为了维护和更有序的开发,将代码分离为函数和类是良好的代码实践。
    • @HenryPenton 如果我的回答对您有用,您可以接受或限定它,以便其他有类似问题的用户可以更快地找到解决方案。
    猜你喜欢
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    相关资源
    最近更新 更多