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

NodeJS+EJS模板渲染时图片无法访问问题求助

Node.js + Express + EJS 模板渲染时图片无法加载的解决方案

嘿,先别急着换PHP!我帮你捋捋这个问题——直接打开HTML页面图片正常,但通过Express服务运行就加载失败,哪怕控制台显示路径正确也没用,这大概率是静态资源没有被Express正确托管导致的,跟EJS本身关系不大,咱们一步步来解决:

核心原因

直接打开本地HTML时,浏览器是从本地文件系统读取图片;但通过Express服务访问时,服务器需要明确告知哪些文件是可公开访问的静态资源,否则会返回404错误,哪怕路径看起来正确也白搭。

解决方案步骤

1. 先确认你的项目目录结构

建议把静态资源(图片、CSS、JS等)统一放在public目录下,比如标准结构:

你的项目/
├── public/
│   ├── images/
│   │   └── 你的图片.png  # 把图片移到这里
├── views/
│   └── template.ejs
└── server.js

2. 在Express中添加静态资源托管中间件

在你的server.js里加入express.static配置,指定静态资源的目录:

const express = require('express');
const app = express();
const path = require('path');

// 关键:托管public目录下的所有静态资源
app.use(express.static(path.join(__dirname, 'public')));

// 设置EJS模板引擎
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

// 渲染模板的路由
app.get('/', (req, res) => {
  res.render('template');
});

app.listen(3000, () => {
  console.log('服务器运行在3000端口');
});

3. 修改EJS中的图片路径

现在图片路径要相对于public目录来写,比如图片在public/images/xxx.png,那EJS里应该这么写:

<img src="/images/你的图片.png" alt="图片描述">

注意开头的/,它代表服务器的根路径,也就是我们托管的public目录。

额外排查点

  • 检查图片文件名和扩展名的大小写:Windows系统不区分大小写,但Linux/macOS会区分,别因为大小写写错导致404
  • 用浏览器开发者工具的「Network」标签查看图片请求的状态码:如果是404,说明路径还是不对;如果是200但图片显示不了,可能是图片本身损坏
  • 确认public目录的路径是否正确:用path.join(__dirname, 'public')可以避免相对路径的坑

按照这个流程操作,基本就能解决图片加载的问题了,Node.js+Express的方案完全能搞定这个场景,不用急着切换到PHP~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:49:52