【问题标题】:Sending Tweet data to PUG template from within GET method从 GET 方法中将 Tweet 数据发送到 PUG 模板
【发布时间】:2018-10-16 11:21:26
【问题描述】:

将从 GET 函数中获取的数据发送到 PUG 模板的最有效方法是什么?我一直在将数据推送到数组中,然后将其发送到模板,但这似乎效率低下。

app.get('/tweet/:id', function(req, res) {
    const id = req.params.id;
    T.get('statuses/show/' + id, function(err, data, response) {
        let stweet = [];
        stweet.push(data.text);
    });
    res.render('tweet', {stweet: stweet});
});

这会从 url 获取 Tweet ID 并使用它来检索 Tweet 对象。有什么方法可以从T.get('statuses/show'...) 中提取“数据”并将其直接显示在 PUG 模板上?

【问题讨论】:

    标签: node.js express twitter


    【解决方案1】:

    首先,您的代码不可能工作,因为T.get 是异步的,而stweet 是在res.render('tweet', {stweet: stweet}); 无权访问的范围内定义的。这样代码就会抛出:

    Uncaught ReferenceError: stweet is not defined
    

    T 支持 Promise,你应该使用它们,这样你的代码会更干净。 T.get完成后直接发送数据到PUG模板即可,无需使用:.push

    app.get('/tweet/:id', async(req, res) => {
    
        try {
            // We wait until `T.get` is done
            const { data } = await T.get(`statuses/show/${req.params.id}`, { /** params **/ });    
            res.render('tweet', { stweet: [data.text] });
    
        } catch(e) {
            // Or whatever error message you want to display
            res.render('error'); 
        }
    });
    

    您应该检查:How do I return the response from an asynchronous call?

    【讨论】:

    • 这似乎总是返回错误。我不知道为什么会这样。
    • “无法读取属性 'base' 或未定义”。不过,似乎添加一个空的配置对象让我解决了这个问题。 const { data } = await T.get('statuses/show/' + req.params.id, {});谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    相关资源
    最近更新 更多