Javascript 用expressjs绘制图像
我是node.js和express.js的新手,我正试图用它们升级我的前端项目。除了要加载的图像外,我设法使一切都变得完美。我尝试了所有我能找到的可能的解决方案,但仍然没有幸福的结局。我的项目有一个通用的express文件结构 我的app.js:Javascript 用expressjs绘制图像,javascript,node.js,express,Javascript,Node.js,Express,我是node.js和express.js的新手,我正试图用它们升级我的前端项目。除了要加载的图像外,我设法使一切都变得完美。我尝试了所有我能找到的可能的解决方案,但仍然没有幸福的结局。我的项目有一个通用的express文件结构 我的app.js: var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('mo
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var index = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
包含图像的示例div:
<div id="logo" class="col-xs-12">
<img class="menuClosed" src="http://localhost:3000/images/logoRV.png">
</div>
这是我在终端上得到的信息:
“GET/images/logoRV.png 200 0.714 ms-856”
以下是检查员在“资源”选项卡中告诉我的内容:
“尝试加载资源时出错”
更新:显然问题是我在那个文件夹里有一个图像的别名,而不是原来的。。。保存原始图像后,它将正确渲染。感谢所有试图提供帮助的人。您需要设置
app.use(express.static('path\u to\u images')
加载图像等静态资源。您尚未发布路由,因此很难知道当路由器遇到类似/images/…
的url时,您打算怎么做,但我猜您只想从目录中提供静态图像
您当前正在使用以下行设置静态目录:
app.use(express.static(path.join(__dirname, 'public')));
你可以把图像放进去
您还可以设置目录以服务于特定URL,如下所示:
app.use('/images', express.static('photos'))
如果您的图像在文件夹中,请说“公共”
project ->
public
-> images
-> pic1.jpg
-> pic2.jpg
-> uploads
index.js
您可以告诉express为静态数据使用路径
app.use(express.static(__dirname + '/public'));
然后可以在HTML attr中指定相对于公用文件夹的路径
<img name="picture" src="/images/pic1.jpg" class="card-img-profile pro-img" id="picture" />
您的express server通过GET请求请求图像,如果您没有收到图像的响应,我建议修改您的标题配置,查看上面的解决方案这应该已经起作用了,但“如果尚未解决”,以下配置可能会有所帮助:
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*'); // change '*' to domain to restrict access to domain only
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, ContentType, Accept, Authorization'
);
if (req.method === 'OPTIONS') {
// This will tell express that GET requests to images should be allowed
res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
res.status(200).json({});
}
next();
});
关于文件服务的解释可以在这里找到:还有,您的图像存储在服务器硬盘上的什么位置?当您说您在“终端”看到一条消息时,您的意思是在服务器计算机上吗?我使用本地服务器,图像存储在public>images>*此处*如果您只放置此URL
http://localhost:3000/images/logoRV.png
直接进入浏览器URL栏?您在浏览器中看到了什么?浏览器控制台显示了什么?Chrome网络选项卡显示了什么?Safari是什么我得到一个带?标志的蓝色正方形,控制台中没有消息,在终端中我得到:“get/images/logoRV.png 200 8.636 ms-856”…现在,在Chrome浏览器和控制台中我得到了相同的消息:“导航到”Chrome网络选项卡显示了什么?它是否显示了GET中的200状态代码?如果是,则您的图像一定已损坏。浏览器正在接收图像,但无法读取它们。如果不是200状态代码,则显示什么?OP声称浏览器显示的是200状态,这意味着必须有一条路径显示为mat我想知道当OP在浏览器中加载时会发生什么?我想知道路由是否匹配,但不返回图像?了解路由中的内容会很有帮助。是的,我对在哪个位置显示的消息也有点困惑(因此我对OP的评论)。对于他们发布的两条消息,如果它们实际应用于同一请求,唯一的解释是,服务器提供了一个非映像或损坏的映像,但浏览器无法处理,因为它是一个坏映像。但是,这似乎不太可能,因此OP发布的信息可能在某种程度上有缺陷,这是错误的为什么我们会感到困惑。在浏览器中,我看到一个带?号的矩形。很明显,路径是匹配的,因为我没有从javascript控制台收到任何错误。我尝试在我的app.js中添加这些解决方案,但仍然没有成功……有点沮丧!考虑返回PHP XD“IF”所有这些都不起作用…您可能需要配置您的express标头,添加以下内容可能会有所帮助:res.header('Access-Control-Allow-Methods','PUT,POST,PATCH,DELETE,GET');GET将允许图像响应GET请求谢谢,对我来说很有用。