亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Express.JS使用詳解

2019-11-20 14:21:05
字體:
來源:轉載
供稿:網友

安裝了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 lshello-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

現在來創建應用程序本身!創建一個名為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 myappcreate : myappcreate : myapp/package.jsoncreate : myapp/app.jscreate : myapp/publiccreate : myapp/public/javascriptscreate : myapp/public/imagescreate : myapp/public/stylesheetscreate : myapp/public/stylesheets/style.stylcreate : myapp/routescreate : myapp/routes/index.jscreate : myapp/viewscreate : myapp/views/index.jadecreate : myapp/views/layout.jadeinstall dependencies:$ cd myapp && npm installrun 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 +0msexpress:router defined get /hello.txt +0msexpress:router defined get /hello.txt +1ms

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
永久免费看mv网站入口亚洲| 91欧美精品午夜性色福利在线| 国产精品久久网| 国产在线一区二区三区| 欧美床上激情在线观看| 波霸ol色综合久久| 国产精品免费网站| 国产精品99久久久久久久久久久久| 日韩中文字幕免费视频| 亚洲欧美在线一区| 日韩欧美一区二区在线| 亚洲高清福利视频| 欧美激情在线狂野欧美精品| 亚洲自拍小视频免费观看| 欧美精品福利视频| 九九精品视频在线观看| 日日摸夜夜添一区| 亚洲成年网站在线观看| 伊人精品在线观看| 久久久久久久久久婷婷| 欧美高清无遮挡| 日本一区二区在线免费播放| 欧美激情a∨在线视频播放| 97精品久久久中文字幕免费| 成人激情综合网| 欧美日韩综合视频网址| 国产精品一区二区三区毛片淫片| 国产日本欧美一区| 中文字幕欧美专区| 国外日韩电影在线观看| 国产精品亚洲自拍| 91精品国产91久久久久久吃药| 国产69精品久久久久久| 亚洲一级免费视频| 中文综合在线观看| 国产在线精品播放| 欧美激情精品久久久久久| 97在线视频免费观看| 久久精品国产欧美亚洲人人爽| 韩国19禁主播vip福利视频| 国产精品久久久久久av下载红粉| 久久久久成人精品| 日韩av在线一区| 日韩高清电影免费观看完整版| 国产精品第七影院| 亚洲国产精品久久久| 精品福利在线观看| 久久人人爽人人爽人人片av高请| 91av在线网站| 欧美麻豆久久久久久中文| 久久琪琪电影院| 亚洲福利视频久久| 亚洲人成网在线播放| 成人黄色大片在线免费观看| 欧美又大又硬又粗bbbbb| 国产成人精彩在线视频九色| 亚洲第一精品夜夜躁人人躁| 欧洲日本亚洲国产区| 高清欧美一区二区三区| 欧美最猛性xxxxx亚洲精品| 欧美日韩国产区| 久久久精品999| 亚洲色图av在线| 日本一区二区在线播放| 黑人精品xxx一区一二区| 国产福利成人在线| 国产亚洲激情视频在线| 国产精品av在线播放| 欧美日韩黄色大片| 粉嫩老牛aⅴ一区二区三区| 国产精品午夜国产小视频| 日韩亚洲欧美中文在线| 久久久久久久影院| 91精品国产高清久久久久久久久| 午夜精品一区二区三区在线| 午夜精品久久久久久久99热| 国产一区二区三区免费视频| 啪一啪鲁一鲁2019在线视频| 欧美日韩性视频在线| 亚洲**2019国产| 亚洲aⅴ男人的天堂在线观看| 国产精品久久久久高潮| 国产成人久久久| 久久亚洲精品一区| 国产精品露脸av在线| 91a在线视频| 久久久女人电视剧免费播放下载| 日韩免费观看网站| 国产成人高清激情视频在线观看| 97精品视频在线| 欧美国产一区二区三区| 日韩精品在线第一页| 色偷偷888欧美精品久久久| 欧美人与性动交| 在线观看国产成人av片| 国产一区二区三区欧美| 中文字幕日韩在线播放| 久久久噜噜噜久久| 日韩av手机在线看| 日韩中文在线视频| 欧美夫妻性生活xx| 亚洲精品ady| 日韩av手机在线观看| 久久久黄色av| 欧美成人激情图片网| 欧美视频国产精品| 日韩欧美国产视频| 91在线看www| 精品久久中文字幕久久av| www.日韩欧美| 亚洲精品成人网| 欧美高清在线观看| 亚洲欧美国产制服动漫| 国产成人亚洲综合| 国产日韩欧美在线观看| 亚洲tv在线观看| 久久91亚洲人成电影网站| 国产精品欧美一区二区三区奶水| 91久久精品久久国产性色也91| 久久福利视频网| 精品久久久久久久久久久久久| 欧美日韩在线看| 欧美日韩亚洲精品内裤| 中文字幕视频一区二区在线有码| 欧美视频免费在线观看| 欧美一乱一性一交一视频| 亚洲欧美另类自拍| 高清一区二区三区四区五区| 久久久精品国产网站| 精品亚洲一区二区三区四区五区| 欧美亚洲国产日本| 国产精品高潮呻吟视频| 亚洲第一男人天堂| 538国产精品视频一区二区| 91av在线看| www.亚洲人.com| 日韩欧美中文字幕在线观看| 国产精品毛片a∨一区二区三区|国| 国产精品三级久久久久久电影| 久久999免费视频| 亚洲欧美国产高清va在线播| 国产中文字幕亚洲| 亚洲免费视频网站| 国产精品69久久| 日本电影亚洲天堂| 国产经典一区二区| 97视频在线观看免费高清完整版在线观看| 国产精品日韩欧美综合| 国产精品久久电影观看| 成人免费网站在线观看| 国产精品久久久久久久美男| 国产视频丨精品|在线观看| 国产精品一区二区三区毛片淫片| 国产成人一区二区三区电影| 日韩资源在线观看| 欧美自拍大量在线观看| 欧美日韩亚洲国产一区| 久久久人成影片一区二区三区| 91麻豆国产语对白在线观看| 国产极品精品在线观看| 亚洲女人天堂成人av在线| 国产欧美一区二区三区久久人妖| 日韩av一卡二卡| 久久久日本电影|