欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Express.JS使用詳解

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

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

$ mkdir hello-world

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

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

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

$ npm install

一旦npm完成,你就會(huì)在/node_modules目錄中存有一個(gè)你依賴的Express 3.x。您可以用npm ls驗(yàn)證這一點(diǎn),就像以下代碼片段所展示的Express樹和自己的依賴關(guān)系。

$ 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

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

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

新應(yīng)用程序?qū)嵗梢酝ㄟ^app.VERB()開始定義路線,在這種情況下,通過“Hello World”字符串回應(yīng)“GET/”請(qǐng)求。req和res是提供給您的完全相同的node對(duì)象,因此你可能會(huì)調(diào)用res.pipe(),req.on('data', callback) 和其他你會(huì)做的與Express無關(guān)的事情。

Express增強(qiáng)這些對(duì)象為你提供更高層次的接口如res.send(),除此之外為你添加內(nèi)容長(zhǎng)度:

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

現(xiàn)在為連接調(diào)用app.listen()方法綁定和監(jiān)聽,接受相同的參數(shù)作為節(jié)點(diǎn)的net.Server #listen():

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

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

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

$ npm install -g express-generator

這個(gè)工具提供了一種簡(jiǎn)單的方法來得到一個(gè)應(yīng)用程序框架,但范圍有限,例如,它只支持幾個(gè)模板引擎,而Express自己事實(shí)上支持為node建立任何網(wǎng)站框架模板??赏ㄟ^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

如果你想生成一個(gè)任何情況都支持的應(yīng)用程序您只需要簡(jiǎn)單地執(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的應(yīng)用程序,您必須安裝以下的依賴關(guān)系:

然后讓我們開始吧。

$ npm start

這是所有你需要讓一個(gè)簡(jiǎn)單的應(yīng)用程序啟動(dòng)并運(yùn)行。記住,Express不綁定到任何特定的目錄結(jié)構(gòu),這些只是給你一個(gè)指導(dǎo)。應(yīng)用程序結(jié)構(gòu)的選擇可在github庫中查看 示例 。

錯(cuò)誤處理

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

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

雖然強(qiáng)制的錯(cuò)誤處理中間件通常不是定義在最后,但在其他app.use()后,其調(diào)用如下所示:

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

在這些中間件的響應(yīng)是完全任意的。您可能希望回應(yīng)一個(gè)HTML錯(cuò)誤頁面,一個(gè)簡(jiǎn)單的消息,一個(gè)JSON字符串,或任何其他你喜歡的回應(yīng)。

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

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可以寫請(qǐng)求和錯(cuò)誤信息到stderr,loggly,或類似的服務(wù):

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

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

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

以下errorHandler“全方位”實(shí)現(xiàn)可以定義為:

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

用戶在線計(jì)數(shù)

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

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

接下來,你需要?jiǎng)?chuàng)建一個(gè)應(yīng)用程序,和一個(gè)到redis的連接:

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

接下來的中間件跟蹤在線用戶。在這里我們將使用排序集,這樣我們通過可以redis查詢?cè)诰€用戶,僅需要N毫秒。我們通過時(shí)間戳作為成員的“在線標(biāo)準(zhǔn)”。注意, 這里我們使用user-agent字符串代替通常的用戶id。

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

下一個(gè)中間件是在最后一刻使用zrevrangebyscore來獲取最大在線用戶數(shù)量,我們總是得到最近在線的用戶,他的上限是當(dāng)前時(shí)間戳減去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();
 });
});

最后,我們通過一個(gè)url使用它,并綁定到一個(gè)端口!這就完了,在一個(gè)新瀏覽器訪問這個(gè)應(yīng)用程序,您會(huì)看到在線人數(shù)增加。

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

app.listen(3000);

Expree的反向代理

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

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

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

調(diào)試Express

Express內(nèi)部使用調(diào)試模塊記錄路徑匹配和應(yīng)用程序模式的信息。要看到這條信息,只要簡(jiǎn)單設(shè)置調(diào)試環(huán)境變量為express:*,當(dāng)啟動(dòng)應(yīng)用程序后,你將在控制臺(tái)看以調(diào)試信息。

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

運(yùn)行這個(gè)hello world示例將打印以下內(nèi)容:

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

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

你可以用以下命令啟用這些調(diào)試語句

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

關(guān)于調(diào)試的更多信息,請(qǐng)參見調(diào)試 指南

相關(guān)文章

  • 用Node寫一條配置環(huán)境的指令

    用Node寫一條配置環(huán)境的指令

    這篇文章主要介紹了用Node寫一條配置環(huán)境的指令,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 如何利用nodejs實(shí)現(xiàn)命令行游戲

    如何利用nodejs實(shí)現(xiàn)命令行游戲

    這篇文章主要給大家介紹了關(guān)于如何利用nodejs實(shí)現(xiàn)命令行游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解如何優(yōu)雅在webpack項(xiàng)目實(shí)現(xiàn)mock服務(wù)器

    詳解如何優(yōu)雅在webpack項(xiàng)目實(shí)現(xiàn)mock服務(wù)器

    這篇文章主要為大家介紹了詳解如何優(yōu)雅在webpack項(xiàng)目實(shí)現(xiàn)mock服務(wù)器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 前端node Session和JWT鑒權(quán)登錄示例詳解

    前端node Session和JWT鑒權(quán)登錄示例詳解

    關(guān)于前端鑒權(quán)登錄是比較常見的需求了,本文將從服務(wù)端渲染和前后端分離的不同角度下演示鑒權(quán),為大家介紹前端node Session和JWT鑒權(quán)登錄示例詳解
    2022-07-07
  • NodeJS使用formidable實(shí)現(xiàn)文件上傳

    NodeJS使用formidable實(shí)現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了NodeJS使用formidable實(shí)現(xiàn)文件上傳的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 修改npm全局安裝模式的路徑方法

    修改npm全局安裝模式的路徑方法

    今天小編就為大家分享一篇修改npm全局安裝模式的路徑方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js Process對(duì)象詳解

    Node.js Process對(duì)象詳解

    本文詳細(xì)講解了Node.js Process對(duì)象,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • node.js的Express服務(wù)器基本使用教程

    node.js的Express服務(wù)器基本使用教程

    express是一個(gè)開源的node.js項(xiàng)目框架,下面這篇文章主要給大家介紹了關(guān)于node.js的Express服務(wù)器基本使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • node.js+jQuery實(shí)現(xiàn)用戶登錄注冊(cè)AJAX交互

    node.js+jQuery實(shí)現(xiàn)用戶登錄注冊(cè)AJAX交互

    本篇文章主要介紹了用Node.js當(dāng)作后臺(tái)、jQuery寫前臺(tái)AJAX代碼實(shí)現(xiàn)用戶登錄和注冊(cè)的功能的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-04-04
  • 使用Node.js為其他程序編寫擴(kuò)展的基本方法

    使用Node.js為其他程序編寫擴(kuò)展的基本方法

    這篇文章主要介紹了使用Node.js為其他程序編寫擴(kuò)展的基本方法 ,文中示例是通過Node讓JavaScript代碼與C++應(yīng)用產(chǎn)生交互,需要的朋友可以參考下
    2015-06-06

最新評(píng)論