Rangka Kerja Ekspres Node.js
Pengenalan Ekspres
Express ialah rangka kerja aplikasi web node.js yang ringkas dan fleksibel, yang menyediakan satu siri ciri berkuasa untuk membantu anda membuat pelbagai aplikasi web dan alatan HTTP yang kaya.
Gunakan Express untuk membina tapak web berfungsi sepenuhnya dengan pantas.
Ciri teras rangka kerja Express:
Anda boleh menyediakan perisian tengah untuk membalas permintaan HTTP.
mentakrifkan jadual penghalaan untuk melaksanakan tindakan permintaan HTTP yang berbeza.
Anda boleh memaparkan halaman HTML secara dinamik dengan menghantar parameter kepada templat.
Pasang Express
Pasang Express dan simpan ke senarai dependency:
$ npm install express --save
Arahan di atas akan memasang rangka kerja Express dalam tempoh semasa Dalam direktori node_modules direktori, direktori ekspres akan dibuat secara automatik di bawah direktori node_modules. Modul penting berikut perlu dipasang bersama rangka kerja ekspres:
penghurai badan - perisian tengah node.js untuk memproses JSON, Raw, Teks dan URL yang dikodkan data.
penghuraikan kuki - Ini ialah alat untuk menghuraikan kuki. Melalui req.cookies, anda boleh mendapatkan kuki yang diluluskan dan menukarnya menjadi objek.
multer - node.js middleware, digunakan untuk memproses data borang enctype="multipart/form-data" (tetapkan pengekodan MIME borang).
$ npm install body-parser --save $ npm install cookie-parser --save $ npm install multer --save
Contoh rangka kerja Ekspres Pertama
Seterusnya kami menggunakan rangka kerja Ekspres untuk mengeluarkan "Hello World".
Dalam contoh berikut, kami memperkenalkan modul ekspres dan membalas dengan rentetan "Hello World" selepas pelanggan memulakan permintaan.
Buat fail express_demo.js, kodnya adalah seperti berikut:
//express_demo.js 文件var express = require('express');var app = express();app.get('/', function (req, res) { res.send('Hello World');})var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port)})
Laksanakan kod di atas:
$ node express_demo.js 应用实例,访问地址为 http://0.0.0.0:8081
Lawati http://127.0.0.1:8081 dalam penyemak imbas , Hasilnya adalah seperti yang ditunjukkan di bawah:
Permintaan dan Respons
Aplikasi Ekspres menggunakan parameter fungsi panggil balik: permintaan dan respons Objek untuk mengendalikan data permintaan dan respons. Pengenalan terperinci objek
app.get('/', function (req, res) { // --})
permintaan dan tindak balas:
objek Permintaan - objek permintaan mewakili permintaan HTTP, termasuk Permintaan rentetan pertanyaan, parameter, kandungan, pengepala HTTP dan atribut lain. Atribut biasa ialah:
req.app: Apabila panggilan balik ialah fail luaran, gunakan req.app untuk mengakses contoh nyata
req .baseUrl : Dapatkan laluan URL laluan yang sedang dipasang
req.body / req.cookies: Dapatkan "request body" / Cookies
req.fresh / req.stale: Tentukan sama ada permintaan masih "fresh"
req.hostname / req.ip: Dapatkan nama hos dan alamat IP
req .originalUrl: Dapatkan URL permintaan asal
req.params: Dapatkan parameter penghalaan
req .path: Dapatkan laluan permintaan
req.protocol: Dapatkan jenis protokol
req.query: Dapatkan rentetan parameter pertanyaan bagi URL
req.route: Dapatkan laluan padanan semasa
req.subdomains: Dapatkan nama subdomain
req .accpets(): Semak jenis permintaan pengepala Terima permintaan
req.acceptsCharsets/req.acceptsEncodings/req.acceptsBahasa
req. get(): Dapatkan pengepala permintaan HTTP yang ditentukan
req.is(): Tentukan jenis MIME pengepala permintaan Content-Type
Objek Respons - Objek respons mewakili respons HTTP, iaitu, data respons HTTP yang dihantar kepada klien apabila permintaan diterima. Atribut biasa ialah:
res.app: Sama seperti req.app
res.append(): tambahkan pengepala HTTP yang ditentukan
res.set() selepas res.append() akan menetapkan semula pengepala yang telah ditetapkan sebelumnya
res.cookie(nama, nilai [, pilihan ] ): Tetapkan Kuki
pilihan: domain/tamat tempoh/httpOnly/maxAge/path/secure/signed
res.clearCookie(): Kosongkan Kuki
res.download(): Pindahkan fail dengan laluan yang ditentukan
res.get(): Kembalikan pengepala HTTP yang ditentukan
res.json(): hantarkan respons JSON
res.jsonp(): hantarkan respons JSONP
-
res.location(): Hanya tetapkan pengepala HTTP Lokasi bagi respons, tanpa menetapkan kod status atau respons tutup
res.redirect(): Tetapkan pengepala HTTP Lokasi daripada respons, dan tetapkan kod Status 302
res.send(): Hantar respons HTTP
res.sendFile(path[,options ][,fn]): Pindahkan fail dengan laluan yang ditentukan -Content-Type akan ditetapkan secara automatik mengikut sambungan fail
res.set(): Tetapkan pengepala HTTP dan objek yang masuk boleh menetapkan berbilang pengepala pada satu masa
-
res.status(): Tetapkan kod status HTTP
res.type(): Tetapkan jenis MIME Content-Type
Penghalaan
Kami telah pun memahami aplikasi asas permintaan HTTP dan penghalaan menentukan siapa (skrip yang ditentukan) bertindak balas kepada permintaan pelanggan.
Dalam permintaan HTTP, kami boleh mengekstrak URL yang diminta dan parameter GET/POST melalui penghalaan.
Seterusnya kami melanjutkan Hello World dan menambahkan beberapa fungsi untuk mengendalikan lebih banyak jenis permintaan HTTP.
Buat fail express_demo2.js, kodnya adalah seperti berikut:
var express = require('express');var app = express();// 主页输出 "Hello World"app.get('/', function (req, res) { console.log("主页 GET 请求"); res.send('Hello GET');})// POST 请求app.post('/', function (req, res) { console.log("主页 POST 请求"); res.send('Hello POST');})// /del_user 页面响应app.get('/del_user', function (req, res) { console.log("/del_user 响应 DELETE 请求"); res.send('删除页面');})// /list_user 页面 GET 请求app.get('/list_user', function (req, res) { console.log("/list_user GET 请求"); res.send('用户列表页面');})// 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求app.get('/ab*cd', function(req, res) { console.log("/ab*cd GET 请求"); res.send('正则匹配');})var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port)})
Lakukan kod di atas:
$ node express_demo2.js 应用实例,访问地址为 http://0.0.0.0:8081
Seterusnya anda boleh cuba mengakses http://127.0. 0.1:8081 Alamat yang berbeza untuk melihat kesannya.
Akses http://127.0.0.1:8081/list_user dalam penyemak imbas, hasilnya adalah seperti yang ditunjukkan di bawah:
Akses http://127.0.0.1 dalam penyemak imbas : 8081/abcd, hasilnya adalah seperti yang ditunjukkan di bawah:
Akses http://127.0.0.1:8081/abcdefg dalam penyemak imbas, hasilnya adalah seperti yang ditunjukkan di bawah:
Fail statik
Express menyediakan middleware terbina dalam express.static untuk menetapkan fail statik seperti imej, CSS, JavaScript, dll.
Anda boleh menggunakan perisian tengah express.static untuk menetapkan laluan fail statik. Contohnya, jika anda meletakkan imej, CSS dan fail JavaScript dalam direktori awam, anda boleh menulis:
app.use(express.static('public'));
Kami boleh meletakkan beberapa imej dalam direktori awam/imej, seperti berikut:
node_modules server.jspublic/public/imagespublic/images/logo.png
Mari ubah suai aplikasi "Hello Word" untuk menambah fungsi memproses fail statik.
Buat fail express_demo3.js, kodnya adalah seperti berikut:
var express = require('express');var app = express();app.use(express.static('public'));app.get('/', function (req, res) { res.send('Hello World');})var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port)})
Laksanakan kod di atas:
$ node express_demo3.js 应用实例,访问地址为 http://0.0.0.0:8081
Laksanakan kod di atas:
Akses dalam pelayar http://127.0.0.1:8081/images/logo.png (contoh ini menggunakan logo tutorial rookie), hasilnya adalah seperti yang ditunjukkan di bawah:
DAPATKAN kaedah
Contoh berikut menunjukkan penyerahan dua parameter melalui kaedah GET dalam borang Kita boleh menggunakan penghala process_get dalam fail server.js untuk memproses input:
<🎜. >Kod fail index.htm adalah seperti berikut :<html><body><form action="http://127.0.0.1:8081/process_get" method="GET">First Name: <input type="text" name="first_name"> <br>Last Name: <input type="text" name="last_name"><input type="submit" value="Submit"></form></body></html>Kod fail server.js adalah seperti berikut:
var express = require('express');var app = express();app.use(express.static('public'));app.get('/index.htm', function (req, res) { res.sendFile( __dirname + "/" + "index.htm" );})app.get('/process_get', function (req, res) { // 输出 JSON 格式 response = { first_name:req.query.first_name, last_name:req.query.last_name }; console.log(response); res.end(JSON.stringify(response));})var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port)})Laksanakan kod di atas:
node server.js 应用实例,访问地址为 http://0.0.0.0:8081Akses pelayar http: //127.0.0.1:8081/index.htm, Seperti yang ditunjukkan dalam gambar: Kini anda boleh memasukkan data ke dalam borang dan menyerahkannya, seperti yang ditunjukkan di bawah:
Kaedah POST Contoh berikut Ia menunjukkan penyerahan dua parameter melalui kaedah POST dalam borang Kita boleh menggunakan penghala
process_post dalam fail server.js untuk memproses. input:
Kod fail index.htm diubah suai seperti berikut:<html><body><form action="http://127.0.0.1:8081/process_post" method="POST">First Name: <input type="text" name="first_name"> <br>Last Name: <input type="text" name="last_name"><input type="submit" value="Submit"></form></body></html>Kod fail server.js diubah suai seperti berikut:
var express = require('express');var app = express();var bodyParser = require('body-parser');// 创建 application/x-www-form-urlencoded 编码解析var urlencodedParser = bodyParser.urlencoded({ extended: false })app.use(express.static('public'));app.get('/index.htm', function (req, res) { res.sendFile( __dirname + "/" + "index.htm" );})app.post('/process_post', urlencodedParser, function (req, res) { // 输出 JSON 格式 response = { first_name:req.body.first_name, last_name:req.body.last_name }; console.log(response); res.end(JSON.stringify(response));})var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port)})Laksanakan kod di atas:
$ node server.js应用实例,访问地址为 http://0.0.0.0:8081Akses pelayar http://127.0.0.1:8081/index.htm, seperti yang ditunjukkan dalam rajah Seperti yang ditunjukkan: Kini anda boleh memasukkan data ke dalam borang dan menyerahkannya, seperti yang ditunjukkan di bawah:
Muat naik fail Di bawah ini kami mencipta Borang yang digunakan untuk memuat naik fail, menggunakan kaedah POST, dengan atribut enctype borang ditetapkan kepada berbilang bahagian/bentuk -data. kod fail index.htm diubah suai seperti berikut:
<html><head><title>文件上传表单</title></head><body><h3>文件上传:</h3>选择一个文件上传: <br /><form action="/file_upload" method="post" enctype="multipart/form-data"><input type="file" name="image" size="50" /><br /><input type="submit" value="上传文件" /></form></body></html>kod fail server.js diubah suai seperti berikut:
var express = require('express');var app = express();var fs = require("fs");var bodyParser = require('body-parser');var multer = require('multer');app.use(express.static('public'));app.use(bodyParser.urlencoded({ extended: false }));app.use(multer({ dest: '/tmp/'}).array('image'));app.get('/index.htm', function (req, res) { res.sendFile( __dirname + "/" + "index.htm" );})app.post('/file_upload', function (req, res) { console.log(req.files[0]); // 上传的文件信息 var des_file = __dirname + "/" + req.files[0].originalname; fs.readFile( req.files[0].path, function (err, data) { fs.writeFile(des_file, data, function (err) { if( err ){ console.log( err ); }else{ response = { message:'File uploaded successfully', filename:req.files[0].originalname }; } console.log( response ); res.end( JSON.stringify( response ) ); }); });})var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port)})Laksanakan kod di atas:
$ node server.js 应用实例,访问地址为 http://0.0.0.0:8081Akses pelayar http://127.0.0.1:8081/index.htm, seperti yang ditunjukkan dalam gambar: Kini anda boleh memasukkan data ke dalam borang dan menyerahkannya, seperti yang ditunjukkan di bawah:
Pengurusan KukiKami boleh menggunakan perisian tengah untuk menghantar maklumat kuki ke pelayan Node.js Kod berikut mengeluarkan maklumat kuki yang dihantar oleh pelanggan:
// express_cookie.js 文件var express = require('express')var cookieParser = require('cookie-parser')var app = express()app.use(cookieParser())app.get('/', function(req, res) { console.log("Cookies: ", req.cookies)})app.listen(8081)Laksanakan kod di atas:
$ node express_cookie.jsKini anda boleh melawati http://127.0.0.1:8081 dan melihat output maklumat terminal, seperti ditunjukkan di bawah:
Maklumat berkaitan
Tapak web rasmi Express: http://expressjs.com/
-
API Express4.x: http://expressjs.com/zh-cn/4x/api.html