Nodejs Express+jade 关于显示上传图片的问题。
Nodejs Express+jade 关于显示上传图片的问题。
上传了一张图片,路径类似 /photo/img123.jpg, 然后重定向到另一个path,用另一个句柄提交一个jade模版,来显示所有photo文件夹下的图片,结果图片是损坏标志。查看源代码,路径是正确的。请问有谁知道如何解?
Node.js Express + Jade 显示上传图片问题
问题描述
你上传了一张图片,并将其路径存储为 /photo/img123.jpg
。然后你重定向到另一个路由,并使用Jade模板引擎来显示位于 photo
文件夹下的所有图片。但是,你发现图片显示为损坏的图标。通过查看源代码,你确认路径是正确的。
解决方案
问题可能出在以下几个方面:
- 静态资源路径配置:你需要确保Express能够正确地提供静态文件。
- Jade模板中的路径问题:确保在Jade模板中正确引用了图片路径。
以下是详细的解决方案:
配置静态资源路径
首先,确保你的Express应用能够正确地提供静态文件。你可以在你的Express应用中添加以下代码:
const express = require('express');
const path = require('path');
const app = express();
// 设置静态文件目录
app.use('/public', express.static(path.join(__dirname, 'public')));
// 设置views目录
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
在这个例子中,我们将 public
目录设置为静态文件目录。假设你的图片存放在 public/photo
目录下,那么路径应该是 /public/photo/img123.jpg
。
修改Jade模板
接下来,在你的Jade模板中正确引用图片路径。例如:
doctype html
html
head
title Display Images
body
h1 Photos
each img in photos
img(src='/public/photo/' + img, alt='Photo')
在这个模板中,我们遍历 photos
数组(假设它包含了图片的文件名),并为每个图片生成一个 <img>
标签。注意路径是相对于静态文件目录的。
示例代码
完整的示例代码如下:
const express = require('express');
const path = require('path');
const app = express();
// 设置静态文件目录
app.use('/public', express.static(path.join(__dirname, 'public')));
// 设置views目录
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// 假设你有一个路由处理上传的图片
app.post('/upload', (req, res) => {
// 处理上传逻辑...
const photos = ['img123.jpg', 'img456.jpg'];
res.redirect('/display');
});
// 显示图片的路由
app.get('/display', (req, res) => {
const photos = ['img123.jpg', 'img456.jpg']; // 这里从数据库或文件系统获取实际的图片列表
res.render('display', { photos });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Jade模板文件 (views/display.jade)
doctype html
html
head
title Display Images
body
h1 Photos
each img in photos
img(src='/public/photo/' + img, alt='Photo')
通过以上配置和代码,你应该能够正确地在Express应用中显示上传的图片。确保你的图片确实存在于 public/photo
目录下,并且路径配置正确。
要在Express应用中正确显示上传的图片,你需要确保以下几点:
-
静态文件服务:确保你的Express应用可以正确地提供静态文件(如图片)。你可以使用
express.static()
中间件来实现。 -
路径设置:确保你的Jade模板中的路径正确无误。
示例代码
假设你的图片保存在public/photo/
目录下,并且你的Express应用结构如下:
myapp/
├── app.js
├── public/
│ └── photo/
│ └── img123.jpg
└── views/
└── index.jade
app.js
const express = require('express');
const path = require('path');
const app = express();
// 设置静态文件目录
app.use('/public', express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.render('index');
});
app.listen(3000, () => {
console.log('App is running on port 3000');
});
views/index.jade
doctype
html
head
title= title
body
h1= message
img(src='/public/photo/img123.jpg')
解释
-
静态文件服务:
- 使用
app.use('/public', express.static(path.join(__dirname, 'public')));
这行代码,Express会将public
目录下的文件作为静态资源提供服务。这样当你访问/public/photo/img123.jpg
时,Express会从public/photo/
目录下查找并提供这张图片。
- 使用
-
路径设置:
- 在Jade模板中,使用正确的相对路径
src='/public/photo/img123.jpg'
指向你的图片。这样浏览器会向服务器请求这个路径,并通过Express提供的静态文件服务获取到这张图片。
- 在Jade模板中,使用正确的相对路径
确保以上设置后,你的图片应该能够正常显示。如果仍然存在问题,请检查图片是否正确上传并且没有被损坏。