Heim >Web-Frontend >js-Tutorial >Ein Leitfaden für die ersten Schritte zur Verwendung des Express Framework für Node.js_node.js
Einführung in Express
npm bietet eine große Anzahl von Modulen von Drittanbietern, darunter viele Web-Frameworks, wie zum Beispiel Express, ein leichtes Web-Framework, über das wir in diesem Kapitel sprechen werden.
Express ist ein einfaches und flexibles Node.js-Framework für die Entwicklung von Webanwendungen. Es bietet eine Reihe leistungsstarker Funktionen, wie zum Beispiel: Vorlagenanalyse, statische Dateibereitstellung, Middleware, Routing-Steuerung usw., und Sie können auch Plug-Ins verwenden. Ins oder Integrationen Andere Module helfen Ihnen beim Erstellen verschiedener Web- und Mobilgeräteanwendungen. Es ist derzeit das beliebteste Webentwicklungsframework auf Basis von Node.js und unterstützt verschiedene Vorlagen wie EJS und Jade, sodass Sie schnell eine Website mit vollständigen Funktionen erstellen können .
Okay, fangen wir an!
1. NPM-Installation
npm install express
2. Erhalten und zitieren Sie
var express = require('express'); var app = express();
Über die Variable „App“ können wir verschiedene Express-Methoden aufrufen. Der Spaß hat gerade erst begonnen, machen Sie weiter so!
Antrag erstellen
Nachdem wir das Express-Framework kennengelernt hatten, begannen wir mit der Erstellung unserer ersten Express-Anwendung.
Fügen Sie den folgenden Inhalt zu unserer Standardprojekthauptdatei app.js hinzu:
var express = require('express'); var app = express(); app.get('/', function (request, response) { response.send('Hello World!'); }); app.listen(80);
Hinweis: In den folgenden Kursen verwenden wir Port 80, um auf Anfragen zu warten.
Überprüfen Sie nach dem Hinzufügen den Browserinhalt über die „Testadresse“ in der rechten Spalte. Wenn Sie den Inhalt „Hallo Welt!“ sehen, bedeutet dies, dass eine einfache Express-Anwendung erfolgreich erstellt wurde.
Anfrage erhalten
Zuvor haben wir eine einfache Express-Anwendung implementiert. Jetzt beginnen wir mit der detaillierten Beschreibung der spezifischen Implementierung. Zunächst lernen wir die gängigen Methoden von Express kennen.
get-Methode – verarbeitet vom Client ausgegebene GET-Anfragen gemäß dem Anforderungspfad.
Format:
app.get(path,function(request, response));
Pfad ist der Pfad der Anforderung, und der zweite Parameter ist die Rückruffunktion zur Verarbeitung der Anforderung. Es gibt zwei Parameter, Anforderung und Antwort, die Anforderungsinformationen und Antwortinformationen darstellen.
Beispiel unten:
var express = require('express'); var app = express(); app.get('/', function(request, response) { response.send('Welcome to the homepage!'); }); app.get('/about', function(request, response) { response.send('Welcome to the about page!'); }); app.get("*", function(request, response) { response.send("404 error!"); }); app.listen(80);
Im obigen Beispiel wird die Verarbeitungsmethode für den Seitenpfad, den Stammpfad und alle Pfade angegeben. Und innerhalb der Rückruffunktion verwenden Sie die Sendemethode der HTTP-Antwort, um eine Zeichenfolge an den Browser zu senden.
Beziehen Sie sich auf den obigen Code, versuchen Sie, selbst einen Abrufanforderungspfad festzulegen, und greifen Sie dann über den Browser auf die Adresse zu, um zu sehen, ob die Anforderung erfolgreich sein kann.
Middleware41c11716550b4594cd05d1f9a396284b
1. Was ist Middleware?
Middleware ist eine Funktion, die HTTP-Anfragen verarbeitet und zum Ausführen verschiedener spezifischer Aufgaben verwendet wird, z. B. zum Überprüfen, ob der Benutzer angemeldet ist, zum Analysieren von Daten und anderen Aufgaben, die abgeschlossen werden müssen, bevor die Daten endgültig an den Benutzer gesendet werden . Sein größtes Merkmal besteht darin, dass die entsprechenden Daten nach der Verarbeitung durch eine Middleware an die nächste Middleware übergeben werden können.
2. Eine Middleware, die keine Operationen ausführt und nur das Anforderungsobjekt übergibt, wahrscheinlich so:
function Middleware(request, response, next) { next(); }
Der nächste im obigen Code ist die Rückruffunktion der Middleware. Wenn es einen Parameter annimmt, bedeutet dies, dass ein Fehler ausgelöst wird, und der Parameter ist der Fehlertext.
function Middleware(request, response, next) { next('出错了!'); }
Nachdem ein Fehler ausgelöst wurde, wird die nachfolgende Middleware nicht mehr ausgeführt, bis eine Fehlerbehandlungsfunktion gefunden wird. Wenn die nächste Methode nicht aufgerufen wird, werden die später registrierten Funktionen nicht ausgeführt.
Grundlegende Nutzung aller Funktionen
Im Gegensatz zur Funktion „get“ kann die Funktion „app.all()“ alle HTTP-Verben abgleichen, was bedeutet, dass sie Anforderungen aus allen Pfaden filtern kann. Wenn Sie die Funktion „all“ zum Definieren von Middleware verwenden, bedeutet dies, dass alle Anforderungen durchlaufen werden müssen Dies zuerst die Middleware.
Format:
app.all(path,function(request, response));
Wie unten gezeigt, verwenden wir die Funktion „all“, um die Antwortheaderattribute vor der Anfrage festzulegen.
var express = require("express"); var app = express(); app.all("*", function(request, response, next) { response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" }); //设置响应头属性值 next(); }); app.get("/", function(request, response) { response.end("欢迎来到首页!"); }); app.get("/about", function(request, response) { response.end("欢迎来到about页面!"); }); app.get("*", function(request, response) { response.end("404 - 未找到!"); }); app.listen(80);
Das „*“ in den obigen Codeparametern bedeutet, dass es für alle Pfade gültig ist. Diese Methode ist besonders nützlich, wenn ein bestimmter Präfixpfad oder ein beliebiger Pfad verarbeitet wird, sie wird die All-Funktion durchlaufen im voraus.
Wenn angezeigt, was passiert, wenn wir die Funktion „Alles“ überspringen? Probieren Sie es selbst aus?
Grundlegende Verwendung 1 verwenden
use ist die Methode von Express zum Aufrufen von Middleware und gibt eine Funktion zurück.
Format:
app.use([path], function(request, response, next){}); //可选参数path默认为"/"。
1. Middleware verwenden
app.use(express.static(path.join(__dirname, '/')));
Wie oben verwenden wir die Funktion „use“, um die Express-Middleware aufzurufen und den Zugriffspfad auf das statische Dateiverzeichnis festzulegen (hier wird davon ausgegangen, dass es sich um den Stammpfad handelt).
2. So rufen Sie zwei Middlewares kontinuierlich auf, wie im folgenden Beispiel gezeigt:
var express = require('express'); var app = express(); app.use(function(request, response, next){ console.log("method:"+request.method+" ==== "+"url:"+request.url); next(); }); app.use(function(request, response){ response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" }); response.end('示例:连续调用两个中间件'); }); app.listen(80);
回调函数的next参数,表示接受其他中间件的调用,函数体中的next(),表示将请求数据传递给下一个中间件。
上面代码先调用第一个中间件,在控制台输出一行信息,然后通过next(),调用第二个中间件,输出HTTP回应。由于第二个中间件没有调用next方法,所以req对象就不再向后传递了。
use基本用法2
use方法不仅可以调用中间件,还可以根据请求的网址,返回不同的网页内容,如下示例:
var express = require("express"); var app = express(); app.use(function(request, response, next) { if(request.url == "/") { response.send("Welcome to the homepage!"); }else { next(); } }); app.use(function(request, response, next) { if(request.url == "/about") { response.send("Welcome to the about page!"); }else { next(); } }); app.use(function(request, response) { response.send("404 error!"); }); app.listen(80);
上面代码通过request.url属性,判断请求的网址,从而返回不同的内容。
回调函数
Express回调函数有两个参数,分别是request(简称req)和response(简称res),request代表客户端发来的HTTP请求,request代表发向客户端的HTTP回应,这两个参数都是对象。示例如下:
function(req, res) { });
在后面的学习中,我们会经常和它打交道,牢牢记住它的格式吧!
获取主机名、路径名
今天我们就先来学习如何使用req对象来处理客户端发来的HTTP请求。
req.host返回请求头里取的主机名(不包含端口号)。
req.path返回请求的URL的路径名。
如下示例:
var express = require('express'); var app = express(); app.get("*", function(req, res) { console.log(req.path); res.send("req.host获取主机名,req.path获取请求路径名!"); }); app.listen(80);
试一试在浏览器中输入任意一个请求路径,通过req查看主机名或请求路径。
query基本用法
query是一个可获取客户端get请求路径参数的对象属性,包含着被解析过的请求参数对象,默认为{}。
var express = require('express'); var app = express(); app.get("*", function(req, res) { console.log(req.query.参数名); res.send("测试query属性!"); }); app.listen(80);
通过req.query获取get请求路径的对象参数值。
格式:req.query.参数名;请求路径如下示例:
例1: /search?n=Lenka
req.query.n // "Lenka"
例2: /shoes?order=desc&shoe[color]=blue&shoe[type]=converse
req.query.order // "desc" req.query.shoe.color // "blue" req.query.shoe.type // "converse"
试一试get请求一个带参数路径,使用“req.query.参数名”方法获取请求参数值。
param基本用法
和属性query一样,通过req.param我们也可以获取被解析过的请求参数对象的值。
格式:req.param("参数名");请求路径如下示例:
例1: 获取请求根路径的参数值,如/?n=Lenka,方法如下:
var express = require('express'); var app = express(); app.get("/", function(req, res) { console.log(req.param("n")); //Lenka res.send("使用req.param属性获取请求根路径的参数对象值!"); }); app.listen(80);
例2:我们也可以获取具有相应路由规则的请求对象,假设路由规则为 /user/:name/,请求路径/user/mike,如下:
app.get("/user/:name/", function(req, res) { console.log(req.param("name")); //mike res.send("使用req.param属性获取具有路由规则的参数对象值!"); });
PS:所谓“路由”,就是指为不同的访问路径,指定不同的处理方法。
看了上面的示例,试一试使用req.param属性解析一个请求路径对象,并获取请求参数值。
params基本用法
和param相似,但params是一个可以解析包含着有复杂命名路由规则的请求对象的属性。
格式:req.params.参数名;
例1. 如上课时请求根路径的例子,我们就可以这样获取,如下:
var express = require('express'); var app = express(); app.get("/user/:name/", function(req, res) { console.log(req.params.name); //mike res.send("使用req.params属性获取具有路由规则的参数对象值!"); }); app.listen(80);
查看运行结果,和param属性功能是一样的,同样获取name参数值。
例2:当然我们也可以请求复杂的路由规则,如/user/:name/:id,假设请求地址为:/user/mike/123,如下:
app.get("/user/:name/:id", function(req, res) { console.log(req.params.id); //"123" res.send("使用req.params属性复杂路由规则的参数对象值!"); });
对于请求地址具有路由规则的路径来说,属性params比param属性是不是又强大了那么一点点呢!
send基本用法
send()方法向浏览器发送一个响应信息,并可以智能处理不同类型的数据。格式如下: res.send([body|status], [body]);
1.当参数为一个String时,Content-Type默认设置为"text/html"。
res.send('Hello World'); //Hello World
2.当参数为Array或Object时,Express会返回一个JSON。
res.send({ user: 'tobi' }); //{"user":"tobi"} res.send([1,2,3]); //[1,2,3]
3.当参数为一个Number时,并且没有上面提到的任何一条在响应体里,Express会帮你设置一个响应体,比如:200会返回字符"OK"。
res.send(200); // OK res.send(404); // Not Found res.send(500); // Internal Server Error
send方法在输出响应时会自动进行一些设置,比如HEAD信息、HTTP缓存支持等等。