You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js从URL获取图片并在页面展示的实现方法问询

写法一:在首页路由获取图片并传递给模板

这种方式会在首页请求时拉取图片,转成Base64格式后传给模板,前端通过指定的img标签展示。

路由代码修改(index.js)

var express = require('express');
var router = express.Router();

// Node.js 18+内置fetch,低于18版本先执行:npm install node-fetch,再添加const fetch = require('node-fetch');

router.get('/', async function(req, res, next) {
  try {
    // 请求你的图片API
    const imageRes = await fetch("https://myimageapi.com/your-image-path");
    if (!imageRes.ok) throw new Error('图片请求失败');
    
    // 将图片转成Base64格式
    const imageBuffer = await imageRes.arrayBuffer();
    const base64Img = `data:${imageRes.headers.get('content-type')};base64,${Buffer.from(imageBuffer).toString('base64')}`;

    // 把Base64字符串传给模板
    res.render('index', {
      page:'Home', 
      menuId:'home',
      imageData: base64Img
    });
  } catch (err) {
    next(err); // 把错误抛给Express的错误处理中间件
  }
});

前端模板修改(以EJS为例)

找到<img id="myimage">,设置src为模板变量:

<img id="myimage" src="<%= imageData %>" alt="展示图片">

写法二:单独的图片代理路由(推荐)

这种方式性能更优,不会把图片数据塞进页面里,同时完全隐藏真实图片API地址。前端img标签直接指向这个代理路由,由后端转发图片内容。

路由代码修改(index.js)

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {         
  res.render('index', {page:'Home', menuId:'home'});
});

router.get('/image', async function(req, res, next) {
  try {
    // 请求你的图片API
    const imageRes = await fetch("https://myimageapi.com/your-image-path");
    if (!imageRes.ok) throw new Error('图片请求失败');

    // 设置响应的图片类型和原API一致
    res.set('Content-Type', imageRes.headers.get('content-type'));
    // 可选:添加缓存头减少重复请求
    res.set('Cache-Control', 'public, max-age=86400');
    // 直接把图片流转发给前端,不用加载到内存
    imageRes.body.pipe(res);
  } catch (err) {
    next(err);
  }
});

前端模板修改(以EJS为例)

直接设置img的src为代理路由:

<img src="/image" alt="展示图片">

额外说明

  • 如果图片API需要认证,在fetch请求里加上对应的请求头,比如:
    const imageRes = await fetch("https://myimageapi.com/your-image-path", {
      headers: {
        'Authorization': 'Bearer YOUR_AUTH_TOKEN'
      }
    });
    

内容的提问来源于stack exchange,提问作者Cory Future

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:39:21