0

私はjavascriptを使ったプログラミングが初めてです。そして、サーバー側にangular + node.jsを選択しました。私はAngularのチュートリアルを行いましたが、彼らが提供したweb-server.jsに関していくつか質問があります。サーバー部分はAngularチュートリアルでカバーされていないため、いくつか質問があります:

サーバーは次のコマンド ラインで実行されます。

node ./scripts/web-server.js

実行されているメイン関数は「main」であり、次の方法で実行されます。

関数は次のとおりです。

function main(argv) {
  new HttpServer({
    'GET': createServlet(StaticServlet),
    'HEAD': createServlet(StaticServlet)
  }).start(Number(argv[2]) || DEFAULT_PORT);
}

function HttpServer(handlers) {
  this.handlers = handlers;
  this.server = http.createServer(this.handleRequest_.bind(this));
}

function createServlet(Class) {
  var servlet = new Class();
  return servlet.handleRequest.bind(servlet);
}

function StaticServlet() {}

StaticServlet.MimeMap = {
  'txt': 'text/plain',
  'html': 'text/html',
  'css': 'text/css',
  'xml': 'application/xml',
  'json': 'application/json',
  'js': 'application/javascript',
  'jpg': 'image/jpeg',
  'jpeg': 'image/jpeg',
  'gif': 'image/gif',
  'png': 'image/png',
  'svg': 'image/svg+xml'
};

私の質問:

{    'GET': createServlet(StaticServlet),
    'HEAD': createServlet(StaticServlet)
  }

これらの行が何をするのかわかりません。私はこの行がオブジェクトを作成すると仮定しますが、私が知っている方法はもっと似ているでしょう

{
    GET: createServlet(StaticServlet),
    HEAD: createServlet(StaticServlet)
  }

これらの行の「 」はどういう意味ですか?

2 番目の質問: これらはどういう意味ですか?

.start(Number(argv[2]) || DEFAULT_PORT);

.start 関数は次のとおりです。

HttpServer.prototype.start = function(port) {
  this.port = port;
  this.server.listen(port);
  util.puts('Http Server running at http://localhost:' + port + '/');
};

しかし、なぜ||なのかわかりません argv[2] は実際には null なので、なぜそれを渡す必要があるのでしょうか。

3 番目の質問: StaticServlet.MimeMap の作成に関するものです。それは私の最初の質問と非常によく似ています。私はここで構文を理解していません:

'txt': 'text/plain',.

それは何を作成しますか?

4

1 に答える 1

1

上記のジャレッドのコメントを拡張します。

HttpServlet コンストラクターと MimeMap 初期化子の両方で単一引用符を使用することは、元の作成者のスタイルの好みにすぎない可能性があります。

これが必要な時があります。たとえば、構文規則に従って有効でない名前や、予約済みの JavaScript キーワードである名前を使用する場合などです。

JavaScriptプログラミング言語の調査から:

オブジェクト リテラル表記では、オブジェクトの説明は、中かっこ内のコンマで区切られた名前と値のペアのセットです。名前は、識別子または文字列の後にコロンを付けることができます。言語定義のエラーのため、予約語は識別子形式では使用できませんが、文字列形式では使用できます。

例えば:

{ 
    'my name here': 'bob',
    '0':            '',
    'new':          ''
}

この線:

.start(Number(argv[2]) || DEFAULT_PORT);

基本的に、コマンドラインでポートを渡すだけで、呼び出し元は、ソースを変更することなく、サーバーがそのポートでリッスンするように明示的に要求できます。例えば:

node ./scripts/web-server.js 8080

そして、次のように表現できます。

.start( Number(argv[2]) ? Number(argv[2]) : DEFAULT_PORT );

またはより長い:

var server = new HttpServer({…});
if(Number(argv[2]) {
    server.start(Number(argv[2]);
} else {
    server.start(DEFAULT_PORT);
}
于 2013-07-28T16:46:03.347 に答える