我在SO上研究了类似的问题,但是没有找到解决我问题的方法......我已经建立了一条快速路线来提供图像,但是我无法让它从存储的地方返回图像。请注意,我已经包含了一个声明,允许来自任何来源的请求。会发生的情况是,当我向http://localhost:8080/images/x10.png
发出请求时,我得到的回复是一个空的图片元素src="http://localhost:8080/images/x10.png
而不是http://ubuntubox.dev/images/x10.png
,这是图片实际所在的位置,是路径我最终传递给请求方法。我错过了什么?感谢。
app.get('/images/*', function(req, res, path){
var imagePath = req.url,
url = 'http://ubuntubox.dev' + imagePath;
request(url, function(error, response, img) {
if(!error && response.statusCode === 200) {
res.header('Access-Control-Allow-Origin', '*');
res.writeHead(200, {'Content-Type': 'image/png' });
res.end(img, 'binary');
} else if(response.statusCode === 404) {
res.status(404);
res.type('txt').send('oops');
}
});
}).listen(8080, '127.0.0.1');
答案 0 :(得分:6)
我不知道你是否还有这个问题,但是......
您的问题的解决方案只是放一个.pipe(res),它会将文件发送到响应
app.get('/images/*', function(req, res, path){
var imagePath = req.url,
url = 'http://ubuntubox.dev' + imagePath;
request(url).pipe(res);
}).listen(8080, '127.0.0.1');
答案 1 :(得分:1)
user2879041已经回答了他认为有用的东西,我仍然会想到另一种提供图像的方式,(我不会手动为每个文件写一个路径并将文件发送到浏览器)。 / p>
由于您已经使用快递,只是直接服务器静态图像,您已经在express.static
app.use(express.static('/Absolute/path/to/the/file/images/img1.png'));
使用express.static的好处是你只需要在想要静态的文件夹中添加图像,express就会为你提供图像(无需添加任何代码)。
答案 2 :(得分:1)
如果您希望以有意义的方式提供图片和其他资源,并且不需要您编写一百万条路线,请尝试以下操作:
app.use(express.static('public'))
您的资产现在应该可以这样提供:
http://localhost:3000/images/kitten.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/app.js
http://localhost:3000/images/bg.png
http://localhost:3000/hello.html
答案 3 :(得分:0)
在快递4中为自己想出了这个。
app.get('/images/img1.png', function(req, res){
res.sendFile('/Absolute/path/to/the/file/images/img1.png');
});
答案 4 :(得分:0)
我不确定情况是否相同。
但这是我的答案:
var path = require('path');
var express = require('express');
var app = express();
var dir = path.join(__dirname, 'public');
app.use('/public', express.static(dir));
app.listen(3000, function () {
console.log('Listening on http://localhost:3000/');
});
注意此行:
app.use('/ public',express.static(dir));
您需要使用app.use
方法再次添加路径
我不知道添加这部分的想法,但这是使其起作用的唯一方法。
并且没有它继续响应“错误”,我无法访问此文件。
希望我能为您提供帮助。