所以我一直聽到很多關於Node.js和javascript web應用程序的信息。我知道的例子往往比那些靜態URL中的web應用更像本地應用程序,但它們不可用。他們似乎並不是可以鏈接到的專用頁面。Node.js應用程序可以有靜態URL嗎?
我的問題是......如果靜態頁面(URL)的存在對於該應用程序是必不可少的,那麼在node.js中構建一個web應用程序是很明智的(例如,想想如何鏈接到推文或ebay列表或WordPress的帖子)。
謝謝!
埃迪
所以我一直聽到很多關於Node.js和javascript web應用程序的信息。我知道的例子往往比那些靜態URL中的web應用更像本地應用程序,但它們不可用。他們似乎並不是可以鏈接到的專用頁面。Node.js應用程序可以有靜態URL嗎?
我的問題是......如果靜態頁面(URL)的存在對於該應用程序是必不可少的,那麼在node.js中構建一個web應用程序是很明智的(例如,想想如何鏈接到推文或ebay列表或WordPress的帖子)。
謝謝!
埃迪
這個答案是因爲靜態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文件。
嗯。你提到,如果沒有框架來構建Web應用程序,你不會推薦使用node.js。我認爲node.js是一個JS框架。至少這就是維基百科告訴我的......「Node.js是類Unix平臺上的V8 JavaScript引擎的事件驅動I/O框架。」 – Eddie 2011-03-10 14:54:49
@Eddie node.js主要提供V8和系統其他部分(套接字,文件io等)之間的橋樑,它還有一個http庫,這樣你就不必自己處理http(因爲http很難)。但是,如果您想以任何方式構建Web應用程序,您將需要額外的框架(express.js),因此您無需自己編寫所有管道代碼,路由和內容。這是另一個抽象層。 – 2011-03-10 16:06:21
陷阱...非常感謝奧斯卡! – Eddie 2011-03-10 20:37:16