DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> Express.JS使用詳解
Express.JS使用詳解
編輯:關於JavaScript     

安裝了node(下載)之後, 在你的機器上創建一個目錄,開始你的第一個應用程序。

$ mkdir hello-world

在這個目錄中你將定義應用程序“包”,這和任何其他node的包沒有什麼不同。文件目錄中的json文件,明確定義了一個依賴項。你可以用npm命令獲取express最新版本,你喜歡這樣做,而不是安裝“3.x”以外的版本,以防止任何未知的驚喜。

{
 
"name": "hello-world",
 
"description": "hello world test app",
 
"version": "0.0.1",
 
"private": true,
 
"dependencies": {
  "express": "3.x"
}
}

現在,您已經有了一個包。json文件在這個目錄你可以使用npm(1)安裝這種依賴關系,在這種情況下只需要輸入:

$ npm install

一旦npm完成,你就會在/node_modules目錄中存有一個你依賴的Express 3.x。您可以用npm ls驗證這一點,就像以下代碼片段所展示的Express樹和自己的依賴關系。

$ npm ls
[email protected] /private/tmp
└─┬ [email protected]
 ├── [email protected]
 ├─┬ [email protected]
 │ ├── [email protected]
 │ ├── [email protected]
 │ ├── [email protected]
 │ ├── [email protected]
 │ └── [email protected]
 ├── [email protected]
 ├── [email protected]
 ├── [email protected]
 ├── [email protected]
 ├── [email protected]
 ├── [email protected]
 ├─┬ [email protected]
 │ └── [email protected]
 └─┬ [email protected]
  └── [email protected]

現在來創建應用程序本身!創建一個名為app.js或server.js文件,不論你喜歡哪一個,引入express,然後用express()創建一個新的應用程序:

var express = require('express');
var app = express();

新應用程序實例可以通過app.VERB()開始定義路線,在這種情況下,通過“Hello World”字符串回應“GET/”請求。req和res是提供給您的完全相同的node對象,因此你可能會調用res.pipe(),req.on('data', callback) 和其他你會做的與Express無關的事情。

Express增強這些對象為你提供更高層次的接口如res.send(),除此之外為你添加內容長度:

app.get('/hello.txt', function(req, res){
 res.send('Hello World');
});

現在為連接調用app.listen()方法綁定和監聽,接受相同的參數作為節點的net.Server #listen():

var server = app.listen(3000, function() {
  console.log('Listening on port %d', server.address().port);
});

使用express(1)來生成應用程序

Express團隊維護便捷的項目生成器,命名為express-generator(1)。如果你用npm全局安裝express-generator,那麼你可以從你電腦的任何地方訪問到它:

$ npm install -g express-generator

這個工具提供了一種簡單的方法來得到一個應用程序框架,但范圍有限,例如,它只支持幾個模板引擎,而Express自己事實上支持為node建立任何網站框架模板。可通過help查看:

Usage: express [options]
Options:
 -h, --help     output usage information
 -V, --version    output the version number
 -e, --ejs      add ejs engine support (defaults to jade)
 -H, --hogan     add hogan.js engine support
 -c, --css  add stylesheet support (less|stylus|compass) (defaults to plain css)
 -f, --force     force on non-empty directory

如果你想生成一個任何情況都支持的應用程序您只需要簡單地執行::

$ express --css stylus myapp
create : myapp
create : myapp/package.json
create : myapp/app.js
create : myapp/public
create : myapp/public/javascripts
create : myapp/public/images
create : myapp/public/stylesheets
create : myapp/public/stylesheets/style.styl
create : myapp/routes
create : myapp/routes/index.js
create : myapp/views
create : myapp/views/index.jade
create : myapp/views/layout.jade

install dependencies:
$ cd myapp && npm install

run the app:
$ DEBUG=myapp node app

像任何其他node的應用程序,您必須安裝以下的依賴關系:

然後讓我們開始吧。

$ npm start

這是所有你需要讓一個簡單的應用程序啟動並運行。記住,Express不綁定到任何特定的目錄結構,這些只是給你一個指導。應用程序結構的選擇可在github庫中查看 示例 。

錯誤處理

錯誤處理中間件定義就像普通中間件,然而必須定義4個參數數量,這是函數簽名(err, req, res, next):

app.use(function(err, req, res, next){
 console.error(err.stack);
 res.send(500, 'Something broke!');
});

雖然強制的錯誤處理中間件通常不是定義在最後,但在其他app.use()後,其調用如下所示:

var bodyParser = require('body-parser');
var methodOverride = require('method-override');
app.use(bodyParser());
app.use(methodOverride());
app.use(app.router);
app.use(function(err, req, res, next){
 // logic
});

在這些中間件的響應是完全任意的。您可能希望回應一個HTML錯誤頁面,一個簡單的消息,一個JSON字符串,或任何其他你喜歡的回應。

為構建有組織的和更高層次的框架,你可以定義幾個這些錯誤處理中間件,就像你會定義普通中間件。例如假設您想為XHR請求定義一個錯誤處理器,除了這些之外,你可能會做的事如下:

var bodyParser = require('body-parser');
var methodOverride = require('method-override'); 

app.use(bodyParser());
app.use(methodOverride());
app.use(app.router);
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);

在更一般的logErrors可以寫請求和錯誤信息到stderr,loggly,或類似的服務:

function logErrors(err, req, res, next) {
 console.error(err.stack);
 next(err);
}

clientErrorHandler的定義如下所示,,注意,這個錯誤將顯式地傳遞到下一個。

function clientErrorHandler(err, req, res, next) {
 if (req.xhr) {
  res.send(500, { error: 'Something blew up!' });
 } else {
  next(err);
 }
}

以下errorHandler“全方位”實現可以定義為:

function errorHandler(err, req, res, next) {
 res.status(500);
 res.render('error', { error: err });
}

用戶在線計數

本節詳細完整講解一個(小)應用程序,使用Redis跟蹤用戶在線數量。首先創建一個包。json文件包含兩個附件,一個用於redis客戶端,另一個用於Express自己。也確保你已包裝了redis並且通過$redis-server運行。

{
 "name": "app",
 "version": "0.0.1",
 "dependencies": {
  "express": "3.x",
  "redis": "*"
 }
}

接下來,你需要創建一個應用程序,和一個到redis的連接:

var express = require('express');
var redis = require('redis');
var db = redis.createClient();
var app = express();

接下來的中間件跟蹤在線用戶。在這裡我們將使用排序集,這樣我們通過可以redis查詢在線用戶,僅需要N毫秒。我們通過時間戳作為成員的“在線標准”。注意, 這裡我們使用user-agent字符串代替通常的用戶id。

app.use(function(req, res, next){
 var ua = req.headers['user-agent'];
 db.zadd('online', Date.now(), ua, next);
});

下一個中間件是在最後一刻使用zrevrangebyscore來獲取最大在線用戶數量,我們總是得到最近在線的用戶,他的上限是當前時間戳減去60000毫秒。

app.use(function(req, res, next){
 var min = 60 * 1000;
 var ago = Date.now() - min;
 db.zrevrangebyscore('online', '+inf', ago, function(err, users){
  if (err) return next(err);
  req.online = users;
  next();
 });
});

最後,我們通過一個url使用它,並綁定到一個端口!這就完了,在一個新浏覽器訪問這個應用程序,您會看到在線人數增加。

app.get('/', function(req, res){
 res.send(req.online.length + ' users online');
});

app.listen(3000);

Expree的反向代理

在反向代理背後使用Expree,如Varnish 或Nginx是微不足道的,然而它需要配置。通過啟用“信任代理”設置app.enable(“trust proxy”),Express有一些反向代理的技巧,X-Forwarded - *頭字段可能是可信的,否則他們可能很容易被欺騙。

啟用該設置有一些微妙的影響。第一個是X-Forwarded-Proto可能被反向代理設定,告訴app那是https或者只是簡單的http。這個值由req.protocol反射。

第二個變化是req.ip和req.ips值將填充X-Forwarded-For地址的列表。

調試Express

Express內部使用調試模塊記錄路徑匹配和應用程序模式的信息。要看到這條信息,只要簡單設置調試環境變量為express:*,當啟動應用程序後,你將在控制台看以調試信息。

$ DEBUG=express:* node ./bin/www

運行這個hello world示例將打印以下內容:

express:application booting in development mode +0ms
express:router defined get /hello.txt +0ms
express:router defined get /hello.txt +1ms

另外, 表達可執行(生成器)生成的程序也使用調試模塊,默認作用域是my-application調試命名空間。

你可以用以下命令啟用這些調試語句

$ DEBUG=my-application node ./bin/www

關於調試的更多信息,請參見調試 指南

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved