最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Express.JS使用詳解

 更新時間:2014年07月17日 09:02:49   投稿:hebedich  
Express 是一個簡潔而靈活的 node.js Web應用框架, 提供一系列強大特性幫助你創(chuàng)建各種Web應用。下面我們將逐步分析下,各位不要輕易離開

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

$ 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
hello-world@0.0.1 /private/tmp
└─┬ express@3.0.0beta7
 ├── commander@0.6.1
 ├─┬ connect@2.3.9
 │ ├── bytes@0.1.0
 │ ├── cookie@0.0.4
 │ ├── crc@0.2.0
 │ ├── formidable@1.0.11
 │ └── qs@0.4.2
 ├── cookie@0.0.3
 ├── debug@0.7.0
 ├── fresh@0.1.0
 ├── methods@0.0.1
 ├── mkdirp@0.3.3
 ├── range-parser@0.0.4
 ├─┬ response-send@0.0.1
 │ └── crc@0.2.0
 └─┬ send@0.0.3
  └── mime@1.2.6

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

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()方法綁定和監(jiān)聽,接受相同的參數作為節(jié)點的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

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

$ 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 });
}

用戶在線計數

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

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

接下來,你需要創(chuàng)建一個應用程序,和一個到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內部使用調試模塊記錄路徑匹配和應用程序模式的信息。要看到這條信息,只要簡單設置調試環(huán)境變量為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

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

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

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

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

相關文章

最新評論

云霄县| 通道| 大邑县| 郁南县| 河曲县| 全南县| 丰原市| 南安市| 凭祥市| 东兰县| 布拖县| 全州县| 儋州市| 桂东县| 石首市| 沅江市| 鹤山市| 德化县| 巴林左旗| 金湖县| 扬州市| 密云县| 泾川县| 满洲里市| 阿合奇县| 舟山市| 阿勒泰市| 什邡市| 准格尔旗| 柯坪县| 恩施市| 昆山市| 科技| 饶平县| 交城县| 凯里市| 辽阳县| 大新县| 乌鲁木齐市| 平安县| 巢湖市|