node.js - Axios 得到请求解析后,因此我的变量没有被分配
问题描述
在我的用户控制器上,我想发送一个获取请求以接收 json 响应。
当响应到来时,我想将值分配给调用嵌入的变量,但是渲染部分:
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(`https://soundcloud.com/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,
});
};
解决方案
请求是异步的。您需要再添加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.com/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.com/oembed?format=json&url=${user.musicLink}`)
embed = response.data
} catch (e) {
console.error(e)
}
res.render('user', {
user,
title: user.name,
embed: embed.html,
});
};
推荐阅读
- flutter - 如何在 Flutter windows 设备中渲染远程网页?
- oracle - 尽管我将输出假脱机在文件中,oracle 仍显示选择查询的输出
- javascript - “加载更多”分页按钮有效,但跳转到页面顶部
- c# - 在 C# WinForms 中更改网格单元格的颜色
- javascript - 如何从 API 导出到 excel 文件
- python - 如何在弹性搜索中一次获取大量基于文档的文档以进行有效比较?
- ceres-solver - Ceres Solver:如何定义边界/约束?
- c++ - 如何用动态数组替换静态数组?
- powerbi - 在计算字段中写入 DAX
- python - 在 django 中使用 elasticsearch 时出错