带有 node js 和 express / ejs 的站点并不总是加载图像

Site with node js and express / ejs does not always load images

我建立了一个网站,基本上使用 Nodejs 来获取图像,然后将其发送到 ejs 以显示在页面上,发生的情况是有时会出现图像,有时看起来网站会先于图像加载可以由节点加载。 我留下了我尝试过的两种方式,一种是评论,另一种是我最后尝试的一种。 这是app.js

function retornaImagens(id){
let imagens= {
    assPacUrl: ''
}
/*
if (fs.existsSync(`${__dirname}\arquivos\consultas\${id}\assPac.png`)) {
    fs.readFile(
        `${__dirname}\arquivos\consultas\${id}\assPac.png`, 'base64',
        (err, base64Image) => {
            if (err) {
                console.log(err)
            } else {
                imagens.assPacUrl = `data:image/png;base64, ${base64Image}`
            }
        }
    )
}

*/

fs.access(`${__dirname}\arquivos\consultas\${id}\assPac.png`,(err)=>{
    if(err){}else{
        fs.readFile(
            `${__dirname}\arquivos\consultas\${id}\assPac.png`, 'base64',
            (err, base64Image) => {
                if (err) {
                    console.log(err)
                } else {
                    imagens.assPacUrl = `data:image/png;base64, ${base64Image}`
                }
            }
        )
    }
})

return imagens;
}

app.get('/consultas/:id/termo',(req,res)=>{
    var imagens = retornaImagens(req.params.id);

    Consulta.findOne({link:`/consultas/${req.params.id}/login`}).populate('medico paciente').exec((err,consulta)=>{
        if(err){
            console.log(err)
        }else{
            console.log(imagens)
            res.render('consulta/termo',{consulta:consulta,id:req.params.id,imagens})
        }
    })
})

这是ejs文件

<img src="<%= imagens.assPacUrl %>">

如果您有使代码更清晰和占用更少内存的技巧,请发给我。

问题出在加载时间上,加载图像需要更长的时间,所以程序继续并使网站变空,添加了 settimeOut。

function enviaTermo(data){
        Consulta.findOne({link:data.link}).populate('medico paciente').exec((err, consulta) => {
            if (err) {
                console.log(err)
            } else {
                console.log(imagens)
                io.to(consulta._id).emit('termo', { consulta: consulta, imagens: imagens })
            }
        })
    }

    setTimeout(() => {
        enviaTermo(data)
    }, 450);