2017-06-15 5 views
2

HTMLページのベースURLを取得する方法を探していたので、ブラウザからの相対URLリクエストでそのベースが使用されていました。サーバーからHTMLをレンダリングするときにここで<base>タグをサーバ側で動的に変更する

は答え Defining root of HTML in a folder within the site root folder

ある - HTMLに<base>要素を追加するための信頼できる方法はありますか?

HTMLファイルは自動的に生成されるため、回避することができれば手動でファイルに<base>タグを追加しません。それは、ページがレンダリングされたときに何らかの形で動的に追加するといいでしょう。それが立つよう

だからここはHTMLです:

<head> 
    <title>Code coverage report for All files</title> 
    <meta charset="utf-8" /> 
    <link rel="stylesheet" href="prettify.css" /> 
    <link rel="stylesheet" href="base.css" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <style type='text/css'> 
     .coverage-summary .sorter { 
      background-image: url(sort-arrow-sprite.png); 
     } 
    </style> 
</head> 

は、私は、サーバーとのレンダリングをベースタグを追加したいので、それは次のようになります。

<head> 
    <title>Code coverage report for All files</title> 
    <meta charset="utf-8" /> 
    <base href="http://localhost:3050/coverage/lcov-report/cdt-now/index.html"> // <<<< 
    <link rel="stylesheet" href="prettify.css" /> 
    <link rel="stylesheet" href="base.css" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <style type='text/css'> 
     .coverage-summary .sorter { 
      background-image: url(sort-arrow-sprite.png); 
     } 
    </style> 
</head> 

問題I index.htmlファイルが私のプロジェクトのルートにないとします:

enter image description here

しかし、上記の<head><link>タグで見られるように、index.htmlファイルは相対パス要求を行います。

私は現在、このようにページをレンダリングしています:

router.get('/', ac.allow('Admin'), function (req, res, next) { 

    let html = path.resolve(__dirname + '/../coverage/lcov-report/cdt-now/index.html'); 

    res.setHeader('content-type', 'text/html'); 
    fs.createReadStream(html).pipe(res); 

}); 
+0

テンプレートの作成が必要です。ジェイド、EJSを知っていますか? – sidewinder

+0

私が質問したように、重要なのはファイルを制御しないということです。それは自動生成されています。私はそれを避けることができれば手動でファイルを修正したくありません。 –

+0

する必要はありません。 – sidewinder

答えて

0

だから、これを行う方法は、ブラウザへの応答をストリーミング私の現在のコードを使用して、次のようになります。

const replacestream = require('replacestream'); 

    router.get('/', ac.allow('Admin'), function (req, res, next) { 

     let html, val = 'coverage/lcov-report/cdt-now/index.html'; 

     try { 
     html = path.resolve(__dirname + `/../${val}`); 
     fs.existsSync(html) 
     } 
     catch (err) { 
     return next(err); 
     } 

     res.setHeader('content-type', 'text/html'); 
     let replacement = `</title><base href="http://localhost:3050/${val}">`; 

     fs.createReadStream(html).pipe(replacestream('</title>', replacement)).pipe(res); 

    }); 

こと基本的な考え方です。

関連する問題