Rumah >hujung hadapan web >tutorial js >Panduan Bermula untuk Menggunakan Rangka Kerja Ekspres untuk Node.js_node.js
Pengenalan kepada Ekspres
npm menyediakan sejumlah besar modul pihak ketiga, termasuk banyak rangka kerja web, seperti Express, rangka kerja web ringan yang akan kita bincangkan dalam bab ini.
Express ialah rangka kerja pembangunan aplikasi web node.js yang ringkas dan fleksibel Ia menyediakan satu siri fungsi yang berkuasa, seperti: penghuraian templat, penyajian fail statik, perisian tengah, kawalan penghalaan, dsb., dan juga boleh menggunakan pemalam. atau penyepaduan Modul lain membantu anda mencipta pelbagai aplikasi web dan peranti mudah alih pada masa ini merupakan rangka kerja pembangunan web yang paling popular berdasarkan Node.js, dan menyokong templat Ejs, jed dan lain-lain, supaya anda boleh membina tapak web dengan fungsi lengkap dengan cepat.
Baiklah, mari mulakan!
1. Pemasangan NPM
npm install express
2. Dapatkan dan sebut harga
var express = require('express'); var app = express();
Melalui "aplikasi" pembolehubah kita boleh memanggil pelbagai kaedah ekspres Keseronokan baru sahaja bermula, teruskan kerja yang baik!
Buat aplikasi
Selepas mengenali rangka kerja Express, kami mula mencipta aplikasi ekspres pertama kami.
Tambah kandungan berikut pada app.js fail utama projek lalai kami:
var express = require('express'); var app = express(); app.get('/', function (request, response) { response.send('Hello World!'); }); app.listen(80);
Nota: Dalam kursus berikut, kami akan menggunakan port 80 untuk mendengar permintaan.
Selepas menambahkannya, semak kandungan penyemak imbas melalui "Alamat Ujian" di lajur kanan Apabila anda melihat "kandungan Hello World, ini bermakna aplikasi ekspres yang mudah telah berjaya dibuat.
dapatkan permintaan
Terdahulu, kami telah melaksanakan aplikasi ekspres yang mudah. Sekarang kami akan mula menerangkan secara terperinci pelaksanaannya Pertama, mari kita pelajari kaedah biasa Express.
kaedah get - mengendalikan permintaan GET yang dikeluarkan oleh klien mengikut laluan permintaan.
Format:
app.get(path,function(request, response));
laluan ialah laluan permintaan, dan parameter kedua ialah fungsi panggil balik untuk memproses permintaan Terdapat dua parameter, permintaan dan respons, yang mewakili maklumat permintaan dan maklumat respons.
Contoh di bawah:
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);
Dalam contoh di atas, kaedah pemprosesan tentang laluan halaman, laluan akar dan semua laluan ditentukan. Dan di dalam fungsi panggil balik, gunakan kaedah hantar respons HTTP untuk menghantar rentetan ke penyemak imbas.
Rujuk kod di atas, cuba tetapkan laluan permintaan dapatkan sendiri, kemudian akses alamat melalui penyemak imbas untuk melihat sama ada permintaan itu boleh berjaya.
Perisian Tengah6e5533f040c40df1faf803b4318359ae
1. Apakah itu middleware?
Middleware ialah fungsi yang memproses permintaan HTTP dan digunakan untuk menyelesaikan pelbagai tugas tertentu, seperti menyemak sama ada pengguna log masuk, menganalisis data dan tugas lain yang perlu diselesaikan sebelum akhirnya data dihantar kepada pengguna . Ciri terbesarnya ialah selepas satu perisian tengah memprosesnya, data yang sepadan boleh dihantar ke perisian tengah seterusnya.
2. Perisian tengah yang tidak melakukan sebarang operasi dan hanya melepasi objek permintaan, mungkin seperti ini:
function Middleware(request, response, next) { next(); }
Yang seterusnya dalam kod di atas ialah fungsi panggil balik perisian tengah. Jika ia mengambil parameter, ia bermakna membuang ralat, dan parameternya ialah teks ralat.
function Middleware(request, response, next) { next('出错了!'); }
Selepas ralat dilemparkan, middleware berikutnya tidak akan dilaksanakan lagi sehingga fungsi pengendalian ralat ditemui. Jika kaedah seterusnya tidak dipanggil, fungsi yang didaftarkan kemudian tidak akan dilaksanakan.
Penggunaan asas semua fungsi
Tidak seperti fungsi get, fungsi app.all() boleh memadankan semua kata kerja HTTP, yang bermaksud ia boleh menapis permintaan daripada semua laluan Jika anda menggunakan fungsi semua untuk mentakrifkan perisian tengah, ini bermakna semua permintaan mesti melalui ini dahulu.
Format:
app.all(path,function(request, response));
Seperti yang ditunjukkan di bawah, kami menggunakan fungsi semua untuk menetapkan atribut pengepala respons sebelum permintaan.
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);
"*" dalam parameter kod di atas bermakna ia sah untuk semua laluan. Kaedah ini amat berguna apabila memproses laluan awalan tertentu atau mana-mana laluan Tidak kira kami meminta sebarang laluan, ia akan melalui semua fungsi terlebih dahulu.
Jika ditunjukkan, apakah yang akan berlaku jika kita melangkau fungsi semua?
gunakan penggunaan asas 1
penggunaan ialah kaedah ekspres untuk memanggil perisian tengah dan ia mengembalikan fungsi.
Format:
app.use([path], function(request, response, next){}); //可选参数path默认为"/"。
1. Gunakan perisian tengah
app.use(express.static(path.join(__dirname, '/')));
Seperti di atas, kami menggunakan fungsi guna untuk memanggil perisian tengah ekspres untuk menetapkan laluan akses kepada direktori fail statik (diandaikan sebagai laluan akar di sini).
2. Cara memanggil dua middleware secara berterusan, seperti yang ditunjukkan dalam contoh berikut:
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缓存支持等等。