2017-09-26 32 views
0

からクライアントの遅れを作るだから私は(app.jsと呼ばれる)サーバ側でこのコードを書いたエクスプレス/ Node.jsのapp.useが

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Multiplayer!</title> 
     <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 
     <script src="/socket.io/socket.io.js"></script> 
    </head> 
    <body> 

    <script> 
     var socket = io(); 
    </script> 

    </body> 
</html> 

端末にnode app.jsを実行してブラウザでlocalhost:2000に移動すると、1〜2分かかることがありますが、「localhostはデータを送信しませんでした」と表示されます。私がapp.use("/", router);をコメントアウトすると、それはうまくロードされます(それはGET /ができないので動作しません)。だから、その行に何か問題があることは分かっていますが、何が分からないのですか?私は、明示的なAPIドキュメントを見回しましたが、何も見つかりませんでしたので、私はここで尋ねています。ありがとう!

答えて

0

このコード:

const router = express.Router; 
app.use("/", router); 

はちょうど間違っています。

// call router constructor and then assign some routes to it 
const router = express.Router(); 
router.get('/something, function(req, res) { 
    // handle this route here 
}); 
// hook the router into our instance of express 
app.use("/", router); 

:あなたが実際に別のルーターを作成したい場合は

、あなたが実際に新しいルータを作成し、新しいルータにはいくつかのルートを割り当てるのが好きexpress.Router()コンストラクタ(doc and example code here)を呼び出しますこの問題の要点は、express.Routerがルータを作成するファクトリ関数であることです。それはルータそのものではありません。実際にルータを作るには、express.Router()でそれを実行する必要があります。

express.Routerを実行しようとすると、その関数はミドルウェアであると予想していたので、以前のコードは応答を送信しませんでした。そして、適切に実装されたミドルウェアは、応答ORコールnext()を送信して、チェーン内の次のミドルウェア/ルートにチェーンする必要があります。 express.Routerファクトリ関数はどちらも実行しません(呼び出されたときに新しいルータを作成し、実際にルートハンドラとなる適切なタイプの関数ではありません)ので、要求はその時点で孤立してしまい、クライアントに何も送信しません他のルートハンドラには進まない。

最終的に要求がタイムアウトします。

+0

ありがとう!私は 'router.use'のために' '/ app''を' 'app.use'に入れ替えて、少しパスを切り替えました。ありがとう! –

関連する問題