Heim > Web-Frontend > js-Tutorial > Ausführliche Erklärung von Express.JS use_node.js

Ausführliche Erklärung von Express.JS use_node.js

WBOY
Freigeben: 2016-05-16 16:41:50
Original
1582 Leute haben es durchsucht

Erstellen Sie nach der Installation von Node (Download) ein Verzeichnis auf Ihrem Computer und starten Sie Ihre erste Anwendung.

$ mkdir hello-world
Nach dem Login kopieren

In diesem Verzeichnis definieren Sie Anwendungspakete, die sich nicht von anderen Knotenpaketen unterscheiden. Die JSON-Datei im Dateiverzeichnis definiert eindeutig eine Abhängigkeit. Sie können den Befehl npm verwenden, um die neueste Version von Express zu erhalten, je nachdem, was Sie bevorzugen, anstatt eine andere Version als „3.x“ zu installieren, um unbekannte Überraschungen zu vermeiden.

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

Jetzt haben Sie ein Paket. json-Datei in diesem Verzeichnis können Sie npm(1) verwenden, um diese Abhängigkeit zu installieren. Geben Sie in diesem Fall einfach Folgendes ein:

$ npm install
Nach dem Login kopieren

Sobald npm abgeschlossen ist, haben Sie eine Express 3.x-Abhängigkeit im Verzeichnis /node_modules. Sie können dies mit npm ls überprüfen, da das folgende Snippet den Express-Baum und seine eigenen Abhängigkeiten zeigt.

$ 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
Nach dem Login kopieren

Jetzt erstellen Sie die Anwendung selbst! Erstellen Sie eine Datei mit dem Namen app.js oder server.js, je nachdem, was Sie bevorzugen, importieren Sie express und verwenden Sie dann express(), um eine neue Anwendung zu erstellen:

var express = require('express');
var app = express();
Nach dem Login kopieren

Neue Anwendungsinstanzen können mit der Definition von Routen über app.VERB() beginnen und in diesem Fall auf eine „GET/“-Anfrage mit der Zeichenfolge „Hello World“ antworten. req und res sind genau die gleichen Knotenobjekte, die Ihnen zur Verfügung gestellt werden. Sie können also res.pipe(), req.on('data', callback) und andere Dinge aufrufen, die nichts mit Express zu tun haben.

Express erweitert diese Objekte, um Ihnen Schnittstellen auf höherer Ebene wie res.send() zur Verfügung zu stellen und zusätzlich die Inhaltslänge für Sie hinzuzufügen:

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

Rufen Sie nun die Methode app.listen() auf, damit die Verbindung gebunden und überwacht werden soll, und akzeptieren Sie dabei die gleichen Parameter wie der net.Server #listen() des Knotens:

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

Verwenden Sie express(1), um die Anwendung zu generieren

Das Express-Team unterhält einen praktischen Projektgenerator namens express-generator(1). Wenn Sie Express-Generator global mit npm installieren, können Sie von überall auf Ihrem Computer darauf zugreifen:

$ npm install -g express-generator
Nach dem Login kopieren

Dieses Tool bietet eine einfache Möglichkeit, ein Anwendungs-Framework zu erhalten, ist jedoch in seinem Umfang begrenzt. Es unterstützt beispielsweise nur wenige Template-Engines, während Express selbst tatsächlich die Erstellung beliebiger Website-Framework-Vorlagen für Node unterstützt. Kann über die Hilfe angezeigt werden:

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
Nach dem Login kopieren

Wenn Sie eine Anwendung erstellen möchten, die jede Situation unterstützt, müssen Sie nur Folgendes ausführen::

$ 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

Nach dem Login kopieren

Wie bei jeder anderen Knotenanwendung müssen Sie die folgenden Abhängigkeiten installieren:

Dann fangen wir an.

$ npm start
Nach dem Login kopieren

Das ist alles, was Sie brauchen, um eine einfache App zum Laufen zu bringen. Denken Sie daran, dass Express nicht an eine bestimmte Verzeichnisstruktur gebunden ist. Diese dienen lediglich als Orientierung. Auswahlmöglichkeiten für Anwendungsstrukturen können in den Beispielen im Github-Repository eingesehen werden.

Fehlerbehandlung

Fehlerbehandlungs-Middleware ist wie gewöhnliche Middleware definiert, muss jedoch die Anzahl von 4 Parametern definieren. Dies ist die Funktionssignatur (err, req, res, next):

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

Obwohl die obligatorische Fehlerbehandlungs-Middleware am Ende normalerweise nicht definiert ist, lautet ihr Aufruf nach anderem app.use() wie folgt:

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
});
Nach dem Login kopieren

Antworten in diesen Middlewares sind völlig willkürlich. Möglicherweise möchten Sie mit einer HTML-Fehlerseite, einer einfachen Nachricht, einer JSON-Zeichenfolge oder einer anderen gewünschten Antwort antworten.

Um ein organisiertes und übergeordnetes Framework aufzubauen, können Sie mehrere dieser Fehlerbehandlungs-Middlewares definieren, genau wie Sie normale Middleware definieren würden. Angenommen, Sie möchten einen Fehlerhandler für XHR-Anfragen definieren. Darüber hinaus können Sie Folgendes tun:

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

Nach dem Login kopieren

In allgemeineren logErrors können Sie Anforderungs- und Fehlermeldungen an stderr, loggly oder ähnliche Dienste schreiben:

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

Die Definition von clientErrorHandler lautet wie folgt. Beachten Sie, dass dieser Fehler explizit an den nächsten übergeben wird.

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

Die folgende „Allround“-Implementierung von errorHandler kann wie folgt definiert werden:

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

Anzahl der Online-Benutzer

In diesem Abschnitt wird ausführlich eine (kleine) Anwendung erläutert, die Redis verwendet, um die Anzahl der Online-Benutzer zu verfolgen. Erstellen Sie zunächst ein Paket. Die JSON-Datei enthält zwei Anhänge, einen für den Redis-Client und einen für Express selbst. Stellen Sie außerdem sicher, dass Redis über $redis-server verpackt ist und ausgeführt wird.

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

Als nächstes müssen Sie eine Anwendung und eine Verbindung zu Redis erstellen:

var express = require('express');
var redis = require('redis');
var db = redis.createClient();
var app = express();
Nach dem Login kopieren

Die nächste Middleware verfolgt Online-Benutzer. Hier verwenden wir einen sortierten Satz, sodass wir Online-Benutzer über Redis abfragen können, was nur N Millisekunden dauert. Wir nutzen Zeitstempel als „Online-Standard“ für Mitglieder. Beachten Sie, dass wir hier die User-Agent-Zeichenfolge anstelle der üblichen Benutzer-ID verwenden.

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

Die nächste Middleware besteht darin, zrevrangebyscore zu verwenden, um im letzten Moment die maximale Anzahl von Online-Benutzern zu ermitteln. Wir erhalten immer den aktuellsten Online-Benutzer, und seine Obergrenze ist der aktuelle Zeitstempel minus 60000 Millisekunden.

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();
 });
});
Nach dem Login kopieren

最后,我们通过一个url使用它,并绑定到一个端口!这就完了,在一个新浏览器访问这个应用程序,您会看到在线人数增加。

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

app.listen(3000);

Nach dem Login kopieren

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
Nach dem Login kopieren

运行这个hello world示例将打印以下内容:

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

另外, 表达可执行(生成器)生成的程序也使用调试模块,默认作用域是my-application调试命名空间。

你可以用以下命令启用这些调试语句

$ DEBUG=my-application node ./bin/www
Nach dem Login kopieren

关于调试的更多信息,请参见调试 指南

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage