我正在处理两个Express JS
个应用程序,一个是API
,第二个是使用此API
的应用程序,通过向用户发出请求并显示收到的信息。
在API
路线中,我将图片作为回复发送:
router.get('/:customer_id',authController.isAuthenticated,(req,res) => {
.
. Retrieving customer data
.
return res.sendFile('/uploads/'+foundCustomer.doc_path);
});
后来另一个应用程序正在获取此document
:
router.get('/:customer_id',(req,res) => {
var options = {
url: 'http://'+config.API.user+':'+config.API.password+'@'+config.API.host+':'+config.API.port+'/customers/'+req.params.customer_id
};
request(options,(err,response,body)=>{
return res.render('customer/show',{
document: ?, // Send document as parameter to view
});
});
});
此时我想用客户customer/show
呈现document
(EJS视图引擎),但我不想将此文档保存在我的应用程序文件中,因为document
是只需要在视图中显示(客户详细信息和文档存储在另一个应用程序中)。
我试图在我的应用程序结构中创建temporary
目录,但很难管理删除那些不需要的文档(应用程序有很多users
,同时很多customers
可以显示)。
我尝试实现的另一个解决方案是在客户端发出Ajax
请求,然后将收到的文档附加到<object data='document'>
。但是这个请求必须通过user
和password
进行身份验证,所以我意识到在客户端javascript上存储凭据不是最好的想法......
我不确定render
是否可以在不保存应用程序文件的情况下显示图像?
我将不胜感激任何帮助,也许最好的解决方法是以某种方式管理temporarily
已保存的文档。
答案 0 :(得分:0)
为什么不在EJS模板中创建一个File对象,然后将其用于src
的{{1}}属性?您已从图像API服务器获取原始缓冲区/ blob。将其存储在模板中。
答案 1 :(得分:0)
来自https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob
// place this code (store this variable) inside of your EJS template
// so it can be used by the client-side JS
var aBlob = new Blob( array[, options]); // Where array is the raw buffer data returned from your image API server
请参阅https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
var objectURL = URL.createObjectURL( aBlob ); // Where object is a Blob object
请参阅https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject
const img = document.createElement('img');
img.src = objectURL;
答案 2 :(得分:0)
最终解决方案(已测试),使用axios发出API
请求:
在我的路线中,我将向API
发送HTTP请求以检索PDF
文件(文档):
axios.get(`http://my-api/customer/id`).then(response => {
var photo = new Buffer(response.data, 'binary').toString('base64');
return res.render('customers/show',{
document: document
});
});
在我的ejs
视图中,我使用HTML object
标记来显示收到的PDF:
<object data="data:application/pdf;base64,<%-document%>"></object>