带有 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);
我建立了一个网站,基本上使用 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);