最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Axios之后获得请求解析,因此我的变量不会被分配

运维笔记admin12浏览0评论

Axios之后获得请求解析,因此我的变量不会被分配

Axios之后获得请求解析,因此我的变量不会被分配

在我的用户控制器上,我想发送一个get请求来接收json响应。

当响应到来时,我想将值赋给变量calles embed,但渲染部分:

  res.render('user', {
    user,
    title: user.name,
    embed: embed.html,
  });

在轴功能完成之前发生...让我留下一个空物体。

为了等待响应,我需要做什么......然后渲染模板?

请注意,控制台日志2在此代码中的控制台日志1之前发生:

exports.getUserBySlug = async (req, res, next) => {

  const user = await User.findOne({ slug: req.params.slug })
  let embed = {}
  if (!user) return next();

  axios.get(`;url=${user.musicLink}`)
  .then(response => {
    embed = response.data
  console.log('1: ', embed)

  })
  .catch(error => {
    console.log(error);
  })

  console.log('2: ', embed)

  res.render('user', {
    user,
    title: user.name,
    embed: embed.html,
  });
};
回答如下:

请求是异步的。你需要添加一个await更多

exports.getUserBySlug = async (req, res, next) => {

  const user = await User.findOne({ slug: req.params.slug })
  let embed = {}
  if (!user) return next();

  await axios.get(`https://soundcloud/oembed?format=json&url=${user.musicLink}`)
  .then(response => {
    embed = response.data
  console.log('1: ', embed)

  })
  .catch(error => {
    console.log(error);
  })

  console.log('2: ', embed)

  res.render('user', {
    user,
    title: user.name,
    embed: embed.html,
  });
};

另外我建议不要将async/await.then电话混在一起。

exports.getUserBySlug = async (req, res, next) => {

  const user = await User.findOne({ slug: req.params.slug })
  let embed = {}
  if (!user) return next();

  try {
    const response = await axios.get(`https://soundcloud/oembed?format=json&url=${user.musicLink}`)
    embed = response.data
  } catch (e) {
    console.error(e)
  }

  res.render('user', {
    user,
    title: user.name,
    embed: embed.html,
  });
};
发布评论

评论列表(0)

  1. 暂无评论