代码之家  ›  专栏  ›  技术社区  ›  bukso

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

  •  0
  • bukso  · 技术社区  · 8 年前

    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 回复  |  直到 8 年前
        1
  •  1
  •   Paul Paulincai    8 年前

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

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

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

    如果您需要完全安全和完全“关闭”图像链接/源,您可以使用非常受支持的Ostrio文件流星包。

    enter image description here

        2
  •  1
  •   bukso    8 年前

    我解决了这个问题:

    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();
      }
    });