2011-03-10 32 views
4

所以我一直聽到很多關於Node.js和javascript web應用程序的信息。我知道的例子往往比那些靜態URL中的web應用更像本地應用程序,但它們不可用。他們似乎並不是可以鏈接到的專用頁面。Node.js應用程序可以有靜態URL嗎?

我的問題是......如果靜態頁面(URL)的存在對於該應用程序是必不可少的,那麼在node.js中構建一個web應用程序是很明智的(例如,想想如何鏈接到推文或ebay列表或WordPress的帖子)。

謝謝!

埃迪

回答

7

這個答案是因爲靜態URL靜態頁面和文件是不是真的有node.js的一個問題,都能在這裏找到在express js guide

只使用node.js而沒有任何框架是一個非常糟糕的主意,如果你打算建立一個webapp。但是,有很多用於node.js的良好webframework使生活變得更加輕鬆。如果你安裝了NPM,它們也很容易包含。

我只有express.js的經驗,但如果您有任何MVC類型的Web框架的任何以前的經驗,它使它很容易創建webapps。

從我的經驗來看,確實沒有辦法爲靜態頁面內置到node.js.但是,構建一個可以提供靜態頁面的控制器非常簡單。

這是一個使用express.js的例子。

server.js

...  
app.get('/content/*', controllers.content.getfile); 
... 

這將創建一個捕捉每一個網址去content目錄,並將其引導到行動GETFILE在內容控制器即www.yourdomain.com/content/style路線的.css

controllers.js

... 
exports.content = { 
    getfile : function(req,res){ 
      var uri = url.parse(req.url).pathname; 
      var filename = path.join(process.cwd(), uri); 
      path.exists(filename, function(exists){ 
        if(!exists){ 
          res.writeHead(404, {"Content-Type" : "text/plain"}); 
          res.write("Content not found"); 
          res.end(); 
          return; 
        } 

        fs.readFile(filename, "binary", function(err, file){ 
          res.writeHead(200, {'Content-Type' : mime.lookup(filename) }); 
          res.write(file, "binary"); 
          res.end(); 
        }); 

      }); 
    } 
} 
... 

內容控制器中的此操作getfile將查找內容目錄中的URL中指定的文件,並將其提供給客戶端。它requires您可以與NPM一起獲得的mime庫。

這使得可以在/ content /文件夾中使用靜態文件。如果您希望可以使路由捕獲每個未捕獲的URL並從路由上查找靜態文件。但是,您必須設置某種過濾器,以便您不能訪問server.js文件。

+0

嗯。你提到,如果沒有框架來構建Web應用程序,你不會推薦使用node.js。我認爲node.js是一個JS框架。至少這就是維基百科告訴我的......「Node.js是類Unix平臺上的V8 JavaScript引擎的事件驅動I/O框架。」 – Eddie 2011-03-10 14:54:49

+2

@Eddie node.js主要提供V8和系統其他部分(套接字,文件io等)之間的橋樑,它還有一個http庫,這樣你就不必自己處理http(因爲http很難)。但是,如果您想以任何方式構建Web應用程序,您將需要額外的框架(express.js),因此您無需自己編寫所有管道代碼,路由和內容。這是另一個抽象層。 – 2011-03-10 16:06:21

+0

陷阱...非常感謝奧斯卡! – Eddie 2011-03-10 20:37:16

相關問題