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,
});
};