28

ノードエクスプレスサーバーを起動し、サーバーが起動するとすぐに同じマシンでブラウザーを自動的に起動するアプリケーションがあります。サーバーが起動して準備ができているかどうかを照会するにはどうすればよいですか? 私は本当に .listen 呼び出しにある種のコールバックがあることを望んでいましたが、そうではないようです。予想よりも長く待つこともできますが、これは現場にある機器で行われているため、ブラウザを起動する前に、稼働していることを確認するためにばかげた時間待つ必要があります.または、ページが正しくロードされない場合に更新を押すのに十分なほどユーザーに賢くしてもらいます。どちらも私にとって良い選択肢ではありません。. .

API をオンラインで読みましたが、このようなものは見当たりません。確かに、これを達成できる私が知らないトリックがあります。

ノード HTTP API (コールバックを持ち、リッスン イベントについて通知する) がエクスプレス オブジェクトのベースである場合、文書化されていないエクスプレス コール リッスンのコールバック オプションが存在する可能性があります。あるいは、それがそこにあることを知っているだけなのかもしれません。

どんな助けでも大歓迎です。

4

6 に答える 6

39

Express app.listen関数コールバックをサポートしています。渡す引数を http.listen 呼び出しにマップします。

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

したがって、次のように呼び出すことができます。app.listen(port, callback);

または、http.listen を直接使用することもできます。

var app = require('express')(),
    server = require('http').createServer(app);

server.listen(80, function() {
    console.log('ready to go!');
});
于 2013-08-14T20:26:11.677 に答える
8

http.listenサーバーの準備が整うとトリガーされるコールバック関数を持つメソッドを使用できます。

http.createServer(app).listen(app.get('port'), function () {
    console.log('Printed when ready!!!');
});

Node.js の公式リファレンスを参照してください。

http://nodejs.org/api/all.html#all_server_listen_port_hostname_backlog_callback

http://nodejs.org/api/all.html#all_server_listen_path_callback_1

http://nodejs.org/api/all.html#all_server_listen_handle_callback_1

于 2013-08-14T20:28:56.223 に答える
7

サーバーの起動後にカスタム イベントを発生させることができます。

// server.js
const express = require('express');
const app = express();

modeule.export = app;
app.listen(3000, () => {
   app.emit('listened', null)
});

別のモジュールで、アプリはカスタム イベントをリッスンできます。

// custom.js
const server = require('server.js');
server.on('listened', function() {
  console.log('The server is running!');
});
于 2016-01-19T09:12:20.837 に答える
6

多くの人が言及しているように、listen関数 (express アプリまたは http サーバーの両方でサポートされています) はコールバックをサポートしており、ノード プロセスがリッスンしていることを通知します。

そのため、Express アプリ内からブラウザーを起動する予定がある場合は、そこで実行すれば問題ありません。ただし、外部スクリプトからエクスプレス アプリを起動し、その外部スクリプトでブラウザーを開く場合、ノード コールバックは実際には何も購入しません。

stdout で何らかのマジック ストリングを待機することは、適切な HTTP 応答を待機することよりも実際には改善されません。curl正常な応答が得られるまで、try/backoff/timeout ループを使用することもできます。

于 2013-08-14T20:35:47.803 に答える
5
server.on('listening', function() {
  resolve();//I added my own promise to help me await
});

Listening イベントはうまくいきました。独自の Promise を追加したことに注意してください。このリスナーにエントリ ポイントを追加することで、約束なしで同様の結果を得ることができると思います。

注意してください、私はより直感的に試してみましたが、server.on('listen')うまくいきませんでした。実行中のノード 6.9.1

于 2018-08-27T18:23:44.730 に答える