2016-09-22 8 views
0

これはトリッキーなものです。私の問題がどこから来ているのか正確には分かりませんが、MacとWindowsの両方で再現しました。ノードエクスプレスが要求に応じてハングアップします

私はwebpackにバンドルされたAngular 2サイトを持っています。これは、開発環境用にエクスプレスサーバー経由でノードを使用しています。私のサイトはロードされますが、ある時点で、jsonファイル/docs/package.jsonのhttp get要求が '保留中'にハングします。決して通過せず、最終的にエラーなしで失敗します。ノートの

興味深い:

  • 私の同僚のすべてが同じで働いプロジェクトのコミットがあります。

  • Angularはコール直前にconsole.logを発しますが、コールバックには到達しません。このため、ネットワークパネルを見ると、要求は発生しますが、応答は決して到着しないため、根本原因としてAngularを除外しています。

関連するコードスニペットは、次のとおりです。私は私のnode_modulesディレクトリを吹き飛ばす含め、私の依存関係を再インストールした

init() { 
    this.onReadyPromise = new Promise((resolve, reject)=> { 
    console.log('This log will fire'); 
    this.http.get(`${this.constants['BASE_RESOURCES_PATH']}/${this.constants['JSON_FILE_NAME']}`) 
      .map(res => res.json()) 
      .subscribe(
       console.log('This log will NOT fire'); 
       response => { 
        this.parseDocsJson(response) 
         .then(()=> resolve(this.docs)); 
       }, 
       err => reject(err) 
      ); 
    }); 
    return this.onReadyPromise; 
} 
  • 私はリポジトリ全体を吹き飛ばし、再び引っ張って、すべてのdepsを再インストールしました。同じ問題。
  • ノードとnvmの両方を削除して再インストールし、repoを終了して別のフォルダにrepoを再インストールしました。同じ問題。
  • 私はローカルホストのエイリアシングが役立つかどうかを確認するために/etc/hostsを修正しようとしました。使用しない。
  • ノードバージョン5.8.05.10.0、および6.3.0(複数の同僚が試して成功したバージョン)でこれを試しました。使用しない。
  • 私は端末からのコマンドとIntellijの内蔵ターミナルを実行しました。使用しない。
  • 私はコードを変更しました。このプロジェクトは、昨日仕事を辞めたときにうまくいきました。
  • 私はエクスプレスで複数の異なるポートで試しました。
  • MacOSが一晩更新されました。その効果があるかどうかはわかりません。
  • このプロジェクト用のpythonサーバーもあります。そして、pythonサーバーはうまく動作します。つまり、これはポート関連の問題ではありません。
  • 問題はChrome、Safari、およびFirefoxでも発生します。

これはnode/expressの問題であると思われます.WebpackはPythonバージョンでは完全にうまくバンドルされているようですが、AngularはPythonサーバーでも動作します。

私は私が助けることができるかもしれない人のために自分のサーバーの設定に関する詳細情報を提供する必要があるが、ここで私は今のところ持っているものですよ期待:

server.dev。JS:

const express = require('express'); 
const webpack = require('webpack'); 
const WebpackDevServer = require('webpack-dev-server'); 

const config = require('./webpack.dev'); 
const helpers = require('./helpers'); 

const HOST = '0.0.0.0'; 
const PORT = 3000; 

/** 
* Webpack Development Server configuration 
* Description: The webpack-dev-server is a little node.js Express server. 
* The server emits information about the compilation state to the client, 
* which reacts to those events. 
* 
* See: https://webpack.github.io/docs/webpack-dev-server.html 
*/ 
const webpackDevServerOptions = { 
    historyApiFallback: true, 
    watchOptions: { 
     aggregateTimeout: 300, 
     poll: 1000 
    }, 
    stats: { 
     colors: true, 
     errorDetails: true, 
     cached: true, 
     chunks: false 
    }, 
    contentBase: helpers.root('src'), 
    outputPath: helpers.root('dist'), 
    proxy: { 
     '/docs/**/*.html': { 
      secure: false, 
      bypass: function (req, res, proxyOptions) { 
       if (req.headers.accept.indexOf('html') !== -1) { 
        return '/index.html'; 
       } 
      } 
     } 
    } 
}; 

var app = new WebpackDevServer(webpack(config), webpackDevServerOptions); 

app.use('/docs/', express.static(helpers.root('../docs/'))); 

app.listen(PORT, HOST, function (err) { 
    if (err) { 
     throw err; 
    } 

    console.info(`Listening at http://${HOST}:${PORT}`); 
}); 

更新

webpackDevServerOptionsproxyが問題を引き起こしています。何らかの理由で、すべての要求が肯定的になります。私がconsole.logをバイパス機能に入れた場合、それは/docs/で始まるすべての要求で間違って発生します。

グロブメカニズムが誤ってこれを解析している理由は、私はまだわからないが、私はそれを把握たら、私はノードグロブがですべての要求に合致して、いくつかの理由で、自分の質問に答えるために...

答えて

0

をポストバックします/docs/には、拡張子.htmlがあるかどうかにかかわらず、package.jsonが含まれています。

proxy: { 
    '/docs/**/*.html': { 
     secure: false, 
     bypass: function (req, res, proxyOptions) { 
      if (req.headers.accept.indexOf('html') !== -1) { 
       return '/index.html'; 
      } 
      return req.url; 
     } 
    } 
} 

注:私のマシン上で壊れているように見えるグロブなぜ私が把握することはできませんので、

バンドエイド修正は、if句は、バイパス機能に障害が発生した場合に要求URLを返すようにしました。 I このようなしないでください。私はむしろグロブ機能を正しく持っていると思います...私はこの「修正」でサイトの他の場所で何が壊れたのか分かりません。グロブリング問題について誰かが考えているなら、私は正しい答えとして別の答えを記入して喜んでいます。しかしそれまでは、これはそれです。

関連する問題