2011-12-31 16 views
1

単一app.jsファイルの基本的なのNode.jsアプリケーションでとapp.jsに以下の1つのindex.html文書は、サーバーを起動発射し、うまくlocalhost:8080作品を訪問し、指定された:Node.jsはどのようにビューをレンダリングしますか?

server = http.createServer(function(req, res) { 
    fs.readFile('index.html', function(err, page) { 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     res.write(page); 
     res.end(); 
    }); 

    fs.readFile('new.html', function(err, page) { 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     res.write(page); 
     res.end(); 
    }); 
}); 

server.listen(8080); 

しかし、index.htmlを複製する場合new.htmlのような別のファイルに追加して特定のコンテンツを編集し、index.htmlにリンクを追加すると、新しいページにリンクし、リンクをクリックするとindex.htmlと同じコンテンツがレンダリングされます。実際に、存在しないHTMLページにリンクすると、後続のページがURLに追加されますが、index.htmlの内容が表示され続けます。その後、私は理解していない何らかの理由でlocalhost:8080負荷new.htmlの内容に行く

fs.readFile(req.url, function(err, page) { ... 

:するfs.readFileラインを書き換えるの提案に続い

。これらのビューをどのようにレンダリングする必要がありますか?

+2

あなたは本当にExpress(node web framework)をチェックしてください:http://expressjs.com/ - これは 'http.createServer'よりずっと簡単です。 – Eliasdx

答えて

1

ご要望に応じての条件が必要なため、アクセスURL(req.url)が必要です。

あなたのURLに関係なく、最初のres.end()のレスポンスを閉じ、コードの残りの部分には到達しません(あまり効果がありません。

はこれを試してみてください。

server = http.createServer(function(req, res) { 

    if (req.url == '/index.html') { //will be executed only on index.html 
     fs.readFile('index.html', function(err, page) { 
      res.writeHead(200, {'Content-Type': 'text/html'}); 
      res.write(page); 
      res.end(); 
     }); 
    } 

    if (req.url == '/new.html') { //will be executed only for new.html 
     fs.readFile('new.html', function(err, page) { 
      res.writeHead(200, {'Content-Type': 'text/html'}); 
      res.write(page); 
      res.end(); 
     }); 
    } 
}); 

server.listen(8080); 
+0

IIは最初の条件式を(req.url === '/')とし、2番目の条件式を 'else if(req.url == '/new.html')'とすると動作しますが、この解決法が気に入らない。 – Simpleton

+1

これはNodeが動作する方法です。要求をディスパッチするコードを記述する必要があります。または、より便利な使い方のためにWebフレームワークとして機能するモジュールを探すことができます。 http://expressjs.com/を参照してください –

2

与えられ、他の回答に続いて、また急行を推薦します。しかし、まず、「node.jsがどのようにビューをレンダリングするのですか?」という質問に対する短い答えです。それはそうではありません。

ノードアプリケーションを構築する場合、最小のビルディングブロックノードを使用して小さなWebサーバーを構築しています。ノードには、http.createServer()があります。リクエストに応じて送信するものを選択するロジックを記述するのは、あなた次第です。

また、Expressのような既存のフレームワークを使用することもできます。ここ液を用い急行です:

インストールは急行:

npm install express 

次に、あなたのapp.jsで:

var express = require('express'); 

var app = express.createServer(); 

app.get('/index.html', function(req,res) { 
    res.render('index.html'); 
}); 

app.get('/new.html', function(req,res) { 
    res.render('new.html'); 
}); 

app.listen(8080) 

ます。また、これを追加することで、テンプレート言語としてEJSや翡翠を使用することができます

app.set('view engine', 'ejs'); 

か::

createServerラインの前に210
app.set('view engine', 'jade'); 
関連する問題