流星js,React自定义图像重定向/流星WebApp

时间:2018-08-25 09:10:16

标签: javascript reactjs meteor web-applications

家伙,

我尝试对流星中的图像进行自定义重定向,以便可以使用更短的自定义链接将我重定向到亚马逊上载的图像:

WebApp.connectHandlers.use(function(request, response, next) {
      if (~request._parsedUrl.path.indexOf('/image') > -1) {
        response.writeHead(301, {
          Location:
            'https://s3.eu-central-1.amazonaws.com/my-prepo/folder/imageName123456.jpg',
        });
        response.end();
      }
      next();
    });

我在编写时可以很好地在jsfiddle这样的外部页面中使用它

<img src="http://localhost:4003/image" />

但是当我在<img src="/image" />之类的反应前端中使用它时,该图像没有出现,并且服务器中出现错误:

E20180825-11:59:12.452(3) (webapp_server.js:799) Error running template: Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:491:11)
at ServerResponse.setHeader (_http_outgoing.js:498:3)
at ServerResponse.setWriteHeadHeaders (/home/bux/.meteor/packages/webapp/.1.5.0.1phld1g.dmro++os+web.browser+web.cordova/npm/node_modules/on-headers/index.js:82:19)
at ServerResponse.writeHead (/home/bux/.meteor/packages/webapp/.1.5.0.1phld1g.dmro++os+web.browser+web.cordova/npm/node_modules/on-headers/index.js:41:36)
at getBoilerplateAsync.then (packages/webapp/webapp_server.js:791:13)
at /home/bux/.meteor/packages/promise/.0.10.2.12fknlz.thdv++os+web.browser+web.cordova/npm/node_modules/meteor-promise/fiber_pool.js:43:40

仅使用我自己的链接来显示<img src="/image"之类的图片,我该怎么办?

非常感谢您的建议 最好的祝福 布克

2 个答案:

答案 0 :(得分:1)

首先,我看到您是从S3获取图像的,而您可能应该通过Cloudfront获取它们。主要区别在于缓存。此外,将图像保存到S3时,请确保设置了“过期”和“缓存控制”,以便用户将图像缓存在本地设备上(如果需要)。使用Cloudfront,您可以拥有诸如assets.yourdomain.com / ....您的资产之类的链接。

一种简单而安全的做法是声明一个全局变量,如

var IMAGE = 'https//........your cloudfront root '

,在代码中,您最终得到类似于:

<img src={`${IMAGE}/${imagename}.jpg`}

如果您需要全面的安全性并完全“停用”图像链接/源,则可以使用受高度支持的Ostrio Files Meteor软件包。

P

alternatives

答案 1 :(得分:1)

我这样解决了这个问题:

WebApp.connectHandlers.use(function(req, res, next) {
  const reqUrlParts = req.url.split('/');
  let urlToRedirect = 0;
  if (reqUrlParts[1] && reqUrlParts[1] === 'files') {
    urlToRedirect = fileHandler.handleUrl(req);
  }
  if (urlToRedirect) {
    res.writeHead(301, {
      Location: urlToRedirect,
    });
    res.end();
  } else {
    next();
  }
});

感谢您的建议。关于过期链接-我通过系统处理该链接,即如果该链接过期了,我会自动对其进行更新,然后重定向到新的链接。