Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用expressjs绘制图像_Javascript_Node.js_Express - Fatal编程技术网

Javascript 用expressjs绘制图像

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

我是node.js和express.js的新手,我正试图用它们升级我的前端项目。除了要加载的图像外,我设法使一切都变得完美。我尝试了所有我能找到的可能的解决方案,但仍然没有幸福的结局。我的项目有一个通用的express文件结构

我的app.js:

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请求谢谢,对我来说很有用。