将axios响应发送到渲染页面

时间:2017-10-12 19:28:06

标签: javascript node.js express pug axios

我使用axios从外部api请求数据,我希望在我的渲染页面中使用响应,我的代码如下:

//This is from my controller which is required in my main routes
exports.recordBySlug = async (req, res, next) => {
    const record = await Record.findOne({ slug: req.params.slug });
    if(!record) return next();

    const url = API_URL

    axios
        .get(url)
        .then(res => {
            const album = res.data.album;
            console.log(album)
        })
        .catch(console.error);

    res.render('record', { album })
};

当我完全按照我的意愿刷新“记录”页面时,我在控制台(来自console.log(album))收到回复,但是我想在记录视图页面中使用这些数据(使用哈巴狗)但是我收到“ReferenceError:相册未定义”

我想我可能需要使用await但不确定我做得对。我希望我接近解决方案!

1 个答案:

答案 0 :(得分:1)

您可以将调用移至render以进入回调:

axios
    .get(url)
    .then(res => {
        const album = res.data.album;
        console.log(album);
        res.render('record', { album })
    })
    .catch(next);

如果您想使用await来隐藏Promise,它将是这样的:

try {
    const res = await axios.get(url);
    const album = res.data.album;

    console.log(album);
    res.render('record', { album });
}
catch (err) {
    next(err);
}

不确定是否有办法摆脱try / catch,这让我看起来不整洁。