2016-06-18 6 views
0

私は、流星/publicフォルダ内のページでmeteor-up/mupx展開を持って./public/index.htmlmeteor-up展開の/ publicフォルダからファイルをfs.readFile()するにはどうすればよいですか?

私はこのようなものであるURLからページを正常にロードできます。

http://my-app.com:3333/index.html

しかし、私はしたいと思いますドメインのために、このページをデフォルトのページを作るので、私はこのようにそれにアクセスすることができます。

http://my-app.com:3333/

は、私はこれが私の標準流星プロジェクトから正常に動作します私の流星bootstrap.jsファイル

WebApp.connectHandlers.use("/", function(req, res, next) { 
    var err, error, error1, filepath0, filepath1; 
    if (req.originalUrl !== '/' || req.method !== 'GET') { 
    return next(); 
    } 
    try { 
    filepath0 = process.env.PWD + '/public/index.html'; 
    // filepath1 = '/opt/my-app/current/bundle/programs/web.browser/app/index.html'; 
    fs.statSync(filepath0).isFile(); 
    } catch (error) { 
     err = error1; 
     console.log("file not available, path=" + filepath); 
     return next(); 
    } 
    fs.readFile(filepath0, function(err, buf) { 
    var eTag, err, headers; 
    try { 
     eTag = crypto.createHash('md5').update(buf).digest('hex'); 
     if (req.headers['if-none-match'] === eTag) { 
     res.writeHead(304, 'Not Modified'); 
     return res.end(); 
     } 
    } catch (err) { 
     eTag = null; 
    } 
    headers = { 
     'Content-Type': 'text/html', 
     'ETag': etag 
    }; 
    res.writeHead(200, headers); 
    return res.end(buf); 
    }); 
}); 

に次を追加しました。しかし、mupx経由で展開すると、index.htmlファイルが同じ場所にないため、例外が発生します。

私はそれが Meteorから mupx

経由で展開された後/path/to/Meteor/publicに位置していたファイルをfs.readFile()ことができ、私は `filepath0 = process.env.PWD + '/public/index.html' を使用することができますどのように

ただし、mupxのコードはfilepath0 = /bundle/bundle/public/index.htmlとなり、ファイルはありません。

mupxサーバーからは、実際にはlsというファイルでfilepath1というファイルが使用できますが、その値を使用しても機能しません。

答えて

0

IronRouterは、サーバー側のルートがあります。

セットアップファイル:

# copy /path/to/ionic/www to /path/to/meteor/public 
# put ./public/index.html into ./private 
cd /path/to/meteor/private; ln -s ../public/index.html .; 

セットアップルーティング:これは私がそれを動作させるためにやったことあるのH/T Serving an "index.html" file in public/ when using MeteorJS and Iron Router?

を参照してください

# /path/to/meteor/server/bootstrap.js 
Router.route('/', { 
    where: 'server' 
}).get(function() { 
    var contents; 
    contents = Assets.getText('index.html'); 
    return this.response.end(contents); 
}); 
0

あなたは質問で自分で答えを出しました。デプロイメントのステータス(開発またはプロダクション)に応じて正しいURLが必要です。お使いのmupx設定ファイルに新しい環境変数を設定し、index.htmlのURLを生成する前にprocess.envを探してください。


別に上記はあなたの問題を解決するために迅速かつ汚いハックであるという事実から、私はあなたが完全に間違った方法でこれに近づいていると感じています。サイトにアクセスしたときにindex.htmlがデフォルトのページになる必要がある場合は(つまり、 '/'のルートと同じです)、なぜあなたのclient/main.htmlではないのですか?

クライアントのフォルダを使用できない場合は、プロジェクトルートにmain.htmlのままにして、単純なHTMLリダイレクトを使用して/index.htmlにリダイレクトするように設定してください。何があなたのページ応答を生成する寒さを石にする必要がありますか?

+0

あなたが正しい、これはhack-ですHは。しかし、私はMeteorバックエンドと同じドメインに 'ionic CLI' Webアプリケーションを導入しようとしています。より良い方法があれば、共有してください。 http://stackoverflow.com/questions/37881148/how-can-i-rewrite-redirect-the-default-page-in-meteor-to-point-to-public-indexを参照してください。しかし、私は環境変数を使用して '/ public'フォルダのファイルパスを取得する方法については明確ではありません。 – michael

+0

特定の環境変数( 'PROD')を探すだけです。プロダクションサーバの環境変数に表示されるように 'mupx'設定ファイルで定義します。あなたのコードでは、変数をチェックします。存在する場合は、開発サーバー用に使用するものとは異なるハードコーディングされたURLを使用できます。あなたのカスタム環境変数は、有用な価値を全く必要としません。あとで見つけることができるように宣言するだけです。 'boolean'フラグと同様の働きをします。 – Quirk

1

私はいくつかの試行錯誤でそれを理解しました。正しい方向に私を向けるために@quirkに感謝します。また、console.log(fs.readdirSync('.'))

流星アップ展開で「/パブリック」フォルダへのパスは次のとおりです。

// console.log(fs.readdirSync('.')) => '/opt/my-app/current/bundle/programs/server' public_folder = '../../programs/web.browser/app' filepath = '../../programs/web.browser/app/index.html'

関連する問題