使用express和EJS动态显示图像

2023-12-01

我有一个包含不同图像 URL 的集合。我检索我想要的 URL 并希望将其传递给 jade 模板,例如:

app.get('/',function(req,res){
    mongoDB.getUsedHomePageOne(function(err, result){
        if(!err){
            console.log("getUsedHomePageOne : ");
            console.log(result);
            app.locals['homePageImg'] = result.url;
        }
    });

    app.render('userPageEjs.html',function(err,renderedData){
        console.log(renderedData);
        res.send(renderedData);
    });
});

getUsedHomePageOne 看起来像:

DBMongo.prototype.getUsedHomePageOne  = function(callback){
    this.homePageColl.findOne({used:1}, callback);
};

并在玉模板中:

<img src="<%= homePageImg %>"/>

因此,除非我加载两次页面,否则这将不起作用,我假设是因为它被缓存并且计算得足够快或其他什么。

正确的做法是什么?

PS:我第二次加载页面时,所有内容都会正确加载。

PS2:我不想延迟图像的渲染,我想在图像准备好后加载图像,但无论如何先渲染 HTML 页面。


根据我在您的代码中收集的信息:

app.get('/',function(req,res){
    mongoDB.getUsedHomePageOne(function(err, result){
        if(!err){
            console.log("getUsedHomePageOne : ");
            console.log(result);
            app.locals['homePageImg'] = result.url;
            app.render('userPageEjs.html',function(err,renderedData){
               console.log(renderedData);
               res.send(renderedData);
            });
        }
    });
});

基本上,您有一个到数据库的异步函数,并且在等待数据库函数完成之前快速渲染模板。使用异步函数(其结果应该在下线使用)时的正常模式,您必须调用异步函数内的下一个函数。然而,这可能会导致回调地狱(类似于我上面编写的修复程序),因此通常首选 Promises 或 async.js 等替代方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用express和EJS动态显示图像 的相关文章

随机推荐