Asas Nod JS & Express (III). Cara mendapatkan data daripada rentetan URL. Memadamkan nota: DELETE laluan

Dalam artikel ini, kami melihat seni bina REST, enam keperluan asas REST, maksud kaedah permintaan HTTP dan kod status tindak balas, dan struktur titik akhir API RESTful.

Dalam tutorial ini, kami akan mencipta pelayan yang akan menjadi hos API kami. Anda boleh mencipta API menggunakan mana-mana bahasa pengaturcaraan dan mana-mana pelayan pelayan. perisian, walau bagaimanapun, kami akan menggunakan platform Node.js, yang merupakan pelaksanaan sisi pelayan bagi JavaScript, dan Express, rangka kerja popular untuk Node.js dengan fungsi yang paling diperlukan.

Pemasangan

Pertama, kita perlu memastikan bahawa Node.js dan npm dipasang secara global pada komputer kita. Kita boleh menyemak ini dengan menjalankan arahan dengan bendera -v, yang akan ditunjukkan versi yang dipasang alatan ini. Buka konsol anda dan masukkan arahan berikut:

Nod -v && npm -v v10.8.0 6.2.0

Versi yang dipasang pada komputer anda mungkin berbeza sedikit daripada yang dipasang pada saya, tetapi jika anda mempunyai kedua-dua alatan, maka kita boleh mulakan.

Mari buat folder projek yang dipanggil express-api dan pindah ke dalamnya.

Mkdir express-api && cd express-api

Sekarang bahawa kita berada di dalamnya, kita boleh memulakan projek kita dengan menjalankan perintah init.

Npm init

Akibatnya, anda akan ditanya beberapa soalan tentang projek itu, yang mungkin anda jawab atau tidak. Selepas persediaan anda akan mempunyai fail package.json yang kelihatan seperti ini:

( "nama": "express-api", "version": "1.0.0", "description": "Node.js and Express REST API", "main": "index.js", "scripts": ( "test": "echo \"Ralat: tiada ujian dinyatakan\" && keluar 1" ), "author": "Tania Rascia", "license": "MIT" )

Sekarang kita ada package.json, kami boleh memasang kebergantungan yang diperlukan untuk projek kami. Nasib baik, kami hanya memerlukan yang berikut:

  • body-parser – perisian tengah untuk menghurai badan permintaan;
  • express ialah rangka kerja web dengan fungsi yang paling diperlukan yang akan kami gunakan untuk mencipta pelayan kami;
  • mysql: pemacu MySQL;
  • permintaan (pilihan) - Jalan mudah melaksanakan permintaan HTTP;

Kami akan menggunakan arahan pemasangan, diikuti oleh semua kebergantungan, untuk menyelesaikan penyediaan projek kami.

Npm install body-parser express mysql request

Akibatnya, fail akan dibuat package-lock.json, folder modul_nod, Dan package.json kini akan kelihatan serupa dengan yang berikut:

( "nama": "express-api", "version": "1.0.0", "description": "Node.js and Express REST API", "main": "index.js", "scripts": ( "test": "echo \"Ralat: tiada ujian dinyatakan\" && keluar 1" ), "author": "Tania Rascia", "license": "MIT", "dependencies": ( "dependencies": ( "body -parser": "^1.18.3", "express": "^4.16.3", "mysql": "^2.16.0", "request": "^2.88.0" ) )

Mencipta Pelayan HTTP

Sebelum kami mencipta pelayan Express, kami akan membuat pelayan HTTP dengan cepat menggunakan modul Node http terbina dalam supaya anda boleh mendapatkan idea umum tentang cara pelayan mudah berfungsi.

Buat fail dipanggil hello-server.js. Muatkan modul http, tetapkan nilai port (saya pilih 3001) dan buat pelayan menggunakan kaedah createServer().

// Bina pelayan dengan modul HTTP Node const http = require("http"); const port = 3001; const server = http.createServer();

Dalam tutorial pengenalan siri ini, kami melihat peranan permintaan dan respons untuk pelayan HTTP. Kami akan mengkonfigurasi pelayan kami supaya ia boleh memproses permintaan dan memaparkan URLnya di bahagian pelayan, dan juga supaya di sisi pelanggan mesej " Hello pelayan!».

Server**on("request"** (request, response) => ( console.log(`URL: $(request.url)`); response.end("Hello, server!") ))

Akhir sekali, kami akan memberitahu pelayan port mana yang hendak didengari dan mencetak ralat jika ada.

// Mulakan pelayan server.listen(port, (ralat) => ( jika (ralat) kembalikan console.log(`Ralat: $(error)`); console.log(`Pelayan sedang mendengar pada port $(port)`) ))

Sekarang kita boleh memulakan pelayan kami menggunakan arahan nod diikuti dengan nama fail.

Nod hello-server.js

Anda akan melihat respons dalam konsol.

Pelayan sedang mendengar pada port 3001

Untuk menyemak sama ada pelayan telah benar-benar bermula, pergi ke http://localhost:3001/ dalam penyemak imbas anda. Jika semuanya baik-baik saja, maka anda akan melihat " Hello pelayan!"Pada halaman. Dalam konsol anda, anda akan melihat URL yang diminta.

URL: /URL:/favicon.ico

Jika anda pergi ke http://localhost:3001/hello, anda akan melihat URL: /hello.

Kami juga boleh menggunakan alat cURL pada pelayan tempatan kami, yang akan menunjukkan kepada kami pengepala dan kandungan tepat bagi respons yang dikembalikan.

Curl -i http://localhost:3001 HTTP/1.1 200 OK Tarikh: Rab, 15 Ogos 2018 22:14:23 GMT Sambungan: keep-alive Kandungan-Panjang: 14 Hello, pelayan!

Jika anda menutup konsol pada bila-bila masa anda mahu, pelayan akan berhenti berfungsi.

Kini setelah kami mempunyai pemahaman asas tentang cara pelayan, permintaan dan respons berfungsi bersama, kami boleh menulis semula kod ini untuk Express, yang mempunyai antara muka yang lebih ringkas dan keupayaan yang lebih berkuasa.

Mencipta pelayan Express

Kami akan buat fail baharu, app.js, yang akan bertindak sebagai titik masuk (* fail untuk melancarkan aplikasi) untuk projek kami sendiri. Sama seperti yang asal pelayan http, kami akan meminta modul dan menentukan port untuk memulakan pelayan.

Buat fail app.js dan tambah kod berikut di sana:

// Memerlukan pakej dan tetapkan port const express = require("express"); port const = 3002; aplikasi const = express();

Sekarang, daripada mendengar semua permintaan, kami akan memberitahu pelayan secara jelas bahawa kami hanya mahu permintaan dibuat oleh kaedah GET ke folder akar pelayan (/). Apabila titik akhir menerima permintaan "/", kami akan memaparkan URL yang diminta dan memaparkan mesej "Hello, Server!".

App.get("/", (permintaan, respons) => ( console.log(`URL: $(request.url)`); response.send("Hello, Server!"); ));

Akhir sekali, kami akan memulakan pelayan yang akan mendengar permintaan yang dibuat pada port 3002 menggunakan kaedah listen().

// Mulakan pelayan const server = app.listen(port, (error) =>

Kami boleh memulakan pelayan menggunakan arahan node app.js seperti sebelum ini, namun kami boleh menukar sifat skrip dalam fail package.json Untuk permulaan automatik perintah khusus ini.

"scripts": ("start": "node app.js"),

Sekarang kita boleh menggunakan perintah mula npm untuk memulakan pelayan, dan selepas memulakan kita akan melihat mesej dalam konsol.

Pelayan mendengar pada port 3002

Jika kita penuhi arahan curl-i untuk URL yang dimaksudkan, kita akan melihat bahawa pelayan dalam kes ini sedang berjalan Pangkalan data ekspres dan terdapat beberapa pengepala tambahan seperti Content-Type .

Curl -i http://localhost:3002 HTTP/1.1 200 OK X-Powered-By: Express Content-Type: text/html; charset=utf-8 Panjang Kandungan: 14 ETag: W/"e-gaHDsc0MZK+LfDiTM4ruVL4pUqI" Tarikh: Rab, 15 Ogos 2018 22:38:45 GMT Sambungan: teruskan hidup Hello, Pelayan!

Menambah perisian tengah untuk menghuraikan badan permintaan

Untuk memudahkan proses permintaan dengan kaedah POST dan PUT ke API kami, kami akan menambah middleware untuk menghuraikan badan permintaan. Di sinilah modul penghurai badan berguna. Terima kasih kepada modul ini, seluruh kandungan permintaan masuk akan diekstrak dan datanya akan ditukar menjadi objek JSON yang boleh kami gunakan.

Kami hanya akan meminta modul di bahagian atas fail kod kami. Tambahkan pernyataan memerlukan berikut kepada bahagian atas fail anda app.js.

Const bodyParser = memerlukan("body-parser"); ...

Kami kemudian akan memberitahu apl Express kami untuk menggunakan penghurai badan dan menukar data kepada format JSON.

// Gunakan Node.js body parsing middleware app.use(bodyParser.json()); app.use(bodyParser.urlencoded(( extended: true, )));

Mari kita ubah juga mesej kita untuk menghantar objek JSON sebagai respons dan bukannya teks biasa.

Response.send((message: "Node.js and Express REST API"));

// Memerlukan pakej dan tetapkan port const express = require("express"); port const = 3002; const bodyParser = memerlukan("body-parser"); aplikasi const = express(); // Gunakan Node.js body parsing middleware app.use(bodyParser.json()); app.use(bodyParser.urlencoded(( extended: true, ))); app.get("/", (request, response) => ( response.send(( message: "Node.js and Express REST API")); )); // Mulakan pelayan const server = app.listen(port, (error) => ( if (error) return console.log(`Error: $(error)`); console.log(`Server listening on port $( server.address().port)`); ));

Jika anda menghantar permintaan bila bantuan curl-i ke pelayan, anda akan melihatnya dalam Pengepala Jenis Kandungan kini nilainya ialah aplikasi/json; charset=utf-8 .

Menyediakan laluan

Buat masa ini, kami hanya mempunyai laluan untuk mengendalikan permintaan GET kepada akar aplikasi "/"), tetapi API kami juga seharusnya dapat mengendalikan permintaan HTTP daripada semua kaedah utama ke pelbagai URL. Kami akan mengkonfigurasi penghala (*menyediakan fungsi untuk mengendalikan respons) dan menambah beberapa data rekaan untuk dihantar kepada pengguna.

Jom buat Fail baharu berhak laluan dan fail dipanggil route.js. Kami akan pasangkannya di bahagian atas app.js.

Laluan Const = memerlukan("./routes/routes");

Sila ambil perhatian bahawa sambungan .js dalam require adalah pilihan. Sekarang kita akan mengalihkan laluan untuk pemprosesan DAPATKAN permintaan V route.js. Tambahkan kod berikut pada route.js:

Const router = app => ( app.get("/", (request, response) => ( response.send(( message: "Node.js and Express REST API" )); )); )

Akhir sekali, eksport penghala supaya kami boleh menggunakannya dalam fail kami app.js

// Eksport modul penghala.exports = penghala;

DALAM app.js gantikan kod app.get() sedia ada dengan panggilan ke route() :

Laluan(apl);

Sekarang anda boleh pergi ke http://localhost:3002 dan melihat perkara yang sama seperti sebelum ini. (Jangan lupa untuk memulakan semula pelayan!)

Selepas berjaya menyediakan perkara di atas, kami akan menyediakan beberapa data dalam format JSON menggunakan laluan yang berbeza. Buat masa ini kami hanya akan menggunakan data rekaan memandangkan pangkalan data kami belum lagi dibuat.

Mari buat pembolehubah pengguna dalam route.js dengan beberapa data pengguna rekaan dalam format JSON.

Pengguna Const = [( id: 1, nama: "Richard Hendricks", e-mel: " [e-mel dilindungi]", ), ( id: 2, nama: "Bertram Gilfoyle", e-mel: " [e-mel dilindungi]", }, ];

Kami akan menambah laluan lain untuk mengendalikan /users dan permintaan GET ke penghala kami dan menghantar data pengguna menggunakannya.

App.get("/users", (request, response) => ( response.send(users); ));

Selepas memulakan semula pelayan, anda kini boleh pergi ke http://localhost:3002/users dan melihat semua data kami.

Sila ambil perhatian: jika anda tidak mempunyai sambungan yang dipasang dalam penyemak imbas anda untuk melihat fail dalam format JSON, maka saya amat mengesyorkan anda memuat turun satu, seperti JSONView untuk Chrome. Ini akan memudahkan anda membaca data anda!

Lawati repositori GitHub untuk melihat kod akhir untuk siaran ini dan bandingkan dengan anda.

Kesimpulan

Dalam tutorial ini, kami melihat cara membuat pelayan menggunakan modul HTTP Node terbina dalam dan Bantu Express, cara menetapkan laluan untuk permintaan yang dibuat kepada URL yang berbeza dan cara menerima data yang diterima dalam permintaan GET dalam format JSON.

DALAM manual terkini Dalam siri ini kami akan menyambungkan pelayan Express kami ke MySQL untuk mencipta, melihat, mengemas kini dan memadam pengguna daripada pangkalan data kami, melengkapkan pelaksanaan kefungsian API kami.

Dalam bab ini, saya akan membimbing anda bagaimana anda boleh memulakan pelayan HTTP mudah dalam Node.js dan mula memproses permintaan.

Artikel ini telah diterjemahkan ke bahasa Rusia oleh Andrey Melikhov, pembangun bahagian hadapan daripada Yandex.Money dan editor daripada blog kolektif tentang bahagian hadapan, devSchacht. Cari Andrey di: Twitter, GitHub , Sederhana & SoundCloud

Terjemahan artikel ini dibuat oleh Andrey Melikhov, pembangun bahagian hadapan dari Yandex.Money, editor blog kolektif tentang bahagian hadapan, devSchacht. Twitter| GitHub | Sederhana | SoundCloud



modul http untuk pelayan Node.js anda

Apabila anda mula membina aplikasi HTTP dalam Node.js, modul http/https terbina dalam ialah perkara yang anda akan berinteraksi.

Mari buat pelayan HTTP pertama anda dengan Node.js! Kami perlu menyambungkan modul http dan mengikat pelayan kami ke port 3000.

// content index.js const http = memerlukan("http") const port = 3000 const requestHandler = (permintaan, respons) => ( console.log(request.url) response.end("Hello Node.js Server!" ) ) const server = http.createServer(requestHandler) server.listen(port, (err) => (jika (err) ( return console.log("sesuatu yang buruk berlaku", err) ) console.log(`server sedang mendengar pada $(port)`) ))

Kemudian kami menjalankan skrip ini:

$nodeindex.js

Perkara yang perlu diperhatikan di sini:

  • pengendali permintaan: fungsi ini akan dipanggil setiap kali permintaan datang ke pelayan. Jika anda membuka localhost:3000 dalam penyemak imbas anda, dua mesej akan muncul dalam konsol: satu untuk / dan satu untuk favicon.ico .
  • jika (err): pengendalian ralat: jika port sudah sibuk atau terdapat beberapa sebab lain mengapa pelayan tidak dapat dimulakan, kami akan menerima pemberitahuan tentang perkara ini.

Modul http adalah tahap yang sangat rendah: mencipta aplikasi web yang kompleks menggunakan coretan kod di atas adalah sangat intensif buruh. Atas sebab inilah kami biasanya memilih rangka kerja untuk mengerjakan projek kami. Terdapat banyak rangka kerja, berikut adalah yang paling popular:

Dalam bab ini dan seterusnya, kami akan menggunakan Express, kerana itulah yang anda boleh temui banyak modul dalam NPM.

Ekspres

Rangka kerja web yang pantas, fleksibel dan minimalis untuk Node.js - http://expressjs.com/

Menambah Express pada projek anda ialah pemasangan mudah melalui NPM:

$ npm install express --save

Setelah anda memasang Express, mari lihat cara membuat aplikasi yang serupa dengan apa yang kami tulis sebelum ini:

Const express = require("express") const app = express() const port = 3000 app.get('/', (request, response) => ( response.send("Hello from Express!") )) app. listen(port, (err) => ( if (err) ( return console.log("sesuatu yang buruk berlaku", err) ) console.log("server is listening on $(port)") ))

Perbezaan terbesar yang mungkin anda perhatikan di sini ialah Express memberi anda penghala secara lalai. Anda tidak perlu menghuraikan URL secara manual untuk memutuskan perkara yang perlu dilakukan, sebaliknya anda menentukan penghalaan aplikasi dengan app.get , app.post , app.put dan sebagainya, dan ini sudah diterjemahkan ke dalam permintaan HTTP yang sesuai.

Salah satu konsep paling berkuasa yang Express laksanakan ialah corak Middleware.

Middleware - pemproses perantaraan

Anda boleh menganggap perisian tengah sebagai saluran paip Unix, tetapi untuk permintaan HTTP.

Dalam rajah anda boleh melihat bagaimana permintaan itu melalui aplikasi Ekspres bersyarat. Ia melalui tiga pemproses perantaraan. Setiap pengendali boleh mengubah suai permintaan ini, dan kemudian, berdasarkan logik perniagaan anda, perisian tengah ketiga akan menghantar respons atau permintaan akan pergi ke pengendali laluan yang sepadan.

Dalam amalan anda boleh melakukannya seperti ini:

Const express = memerlukan("express") const app = express() app.use((request, response, next) => ( console.log(request.headers) next() )) app.use((request, response) , seterusnya) => ( request.chance = Math.random() next() )) app.get("/", (request, response) => ( response.json(( chance: request.chance )) )) app.listen(3000)

Perkara yang perlu diperhatikan di sini:

  • app.use: Beginilah cara anda boleh menerangkan perisian tengah. Kaedah ini mengambil fungsi dengan tiga parameter, yang pertama ialah permintaan, yang kedua ialah respons, dan yang ketiga ialah panggilan balik seterusnya. Memanggil isyarat seterusnya Nyatakan bahawa ia boleh beralih ke perisian tengah seterusnya.
  • Perisian tengah pertama hanya mencatatkan pengepala dan segera memanggil yang seterusnya.
  • Yang kedua menambah harta tambahan pada permintaan - ini adalah salah satu ciri templat middleware yang paling berkuasa. Perisian tengah anda boleh menambah data tambahan pada objek permintaan, yang boleh dibaca/diubah suai oleh perisian tengah di bawah.

Ralat pemprosesan

Seperti semua rangka kerja, pengendalian ralat yang betul adalah kritikal. Dalam Express, anda mesti mencipta perisian tengah khas dengan empat parameter input:

Const express = memerlukan('express') const app = express() app.get('/', (request, response) => ( throw new Ralat('oops') )) app.use((err, request, respons, seterusnya) => ( // pengelogan ralat, buat masa ini hanya console.log console.log(err) response.status(500).send('Something broke!') ))

Perkara yang perlu diperhatikan di sini:

  • Pengendali ralat mestilah fungsi terakhir yang ditambahkan melalui app.use .
  • Pengendali ralat menerima panggilan balik seterusnya. Ia boleh digunakan untuk menggabungkan berbilang pengendali ralat.

Penyampaian HTML

Sebelum ini, kami melihat cara menghantar respons JSON. Sudah tiba masanya untuk belajar cara membuat persembahan HTML mudah cara. Untuk melakukan ini, kami akan menggunakan pakej bar hendal dengan pembalut bar hendal ekspres.

Mula-mula mari buat struktur berikut direktori:

├── index.js └── paparan ├── home.hbs └── reka letak └── main.hbs

Selepas itu, isi index.js dengan kod berikut:

// index.js const path = memerlukan("path") const express = require("express") const exphbs = require("express-handlebars") app.engine(".hbs", exphbs(( defaultLayout: "utama ", extname: ".hbs", layoutsDir: path.join(__dirname, "views/layouts"))) app.set("view engine", ".hbs") app.set("views", path. join (__nama, "pandangan"))

Kod di atas memulakan enjin bar hendal dan menetapkan direktori templat kepada paparan/reka letak . Ini ialah direktori tempat templat anda akan disimpan.

Sebaik sahaja anda telah melakukan persediaan ini, anda boleh meletakkan html awal anda dalam main.hbs . Untuk memudahkan urusan, mari kita teruskan:

Hendal ekspres (((badan)))

Anda mungkin melihat label (((body))) - di sinilah kandungan anda akan diletakkan. Jom buat home.hbs!

Hello ((nama))

Perkara terakhir yang perlu kami lakukan untuk membuat ini semua berfungsi ialah menambah pengendali laluan ke aplikasi Express kami:

App.get("/", (permintaan, respons) => ( response.render("home", ( nama: "John")) ))

Kaedah render mengambil dua parameter:

  • Yang pertama ialah nama templat.
  • Yang kedua ialah data yang diperlukan untuk rendering.

Sebaik sahaja anda membuat permintaan ke alamat ini, anda akan menerima sesuatu seperti ini:

Hendal ekspres

Hello John



Ini hanyalah puncak gunung ais. Untuk mengetahui cara menambah lebih banyak templat (dan juga templat separa), sila rujuk dokumentasi rasmi bar hendal ekspres.

Menyahpepijat Ekspres

Dalam sesetengah kes, anda mungkin perlu memikirkan perkara yang berlaku dengan Express semasa aplikasi sedang berjalan. Untuk melakukan ini, anda boleh lulus yang berikut pembolehubah persekitaran dalam Express: DEBUG=express* .

Anda harus memulakan pelayan HTTP Node.js anda menggunakan:

$ DEBUG=express* nod index.js

Ringkasan

Begini cara anda boleh menyediakan pelayan HTTP Node.js pertama anda dari awal. Saya syorkan Express untuk bermula dengan dan kemudian mencuba.

Dalam bab seterusnya anda akan mengetahuinya bagaimana untuk mendapatkan maklumat daripada pangkalan data.

Gergely Nemeth

Pengasas bersama RisingStack

Sila dayakan JavaScript untuk melihat daripadaRisingStack . Diterjemah dengan kebenaran pemegang hak cipta.

Dalam bab ini, saya akan membimbing anda bagaimana anda boleh memulakan pelayan HTTP mudah dalam Node.js dan mula memproses permintaan.

modul http untuk pelayan Node.js anda

Apabila anda mula membina aplikasi HTTP dalam Node.js, modul http/https terbina dalam ialah perkara yang anda akan berinteraksi.

Mari buat pelayan HTTP pertama anda dengan Node.js! Kami perlu menyambungkan modul http dan mengikat pelayan kami ke port 3000.

// content index.js
const http = memerlukan("http")
port const = 3000 const requestHandler = (permintaan, respons) => (
console.log(request.url)
response.end("Hello Node.js Server!")
) const server = http.createServer(requestHandler) server.listen(port, (err) => (
jika (err) (

})

Kemudian kami menjalankan skrip ini:

$nodeindex.js

Perkara yang perlu diperhatikan di sini:

  • requestHandler: Fungsi ini akan dipanggil setiap kali permintaan datang ke pelayan. Jika anda membuka localhost:3000 dalam penyemak imbas anda, dua mesej akan muncul dalam konsol: satu untuk / dan satu untuk favicon.ico .
  • jika (err): pengendalian ralat: jika port sudah sibuk atau terdapat beberapa sebab lain mengapa pelayan tidak dapat dimulakan, kami akan menerima pemberitahuan tentang perkara ini.

Modul http adalah tahap yang sangat rendah: mencipta aplikasi web yang kompleks menggunakan coretan kod di atas adalah sangat intensif buruh. Atas sebab inilah kami biasanya memilih rangka kerja untuk mengerjakan projek kami. Terdapat banyak rangka kerja, berikut adalah yang paling popular:

  • ekspres
  • hapi
  • koa
  • memulihkan

Dalam bab ini dan seterusnya, kami akan menggunakan Express, kerana itulah yang anda boleh temui banyak modul dalam NPM.

Ekspres

Rangka kerja web yang pantas, fleksibel dan minimalis untuk Node.js —http://expressjs.com/

Menambah Express pada projek anda ialah pemasangan mudah melalui NPM:

$ npm install express --save

Setelah anda memasang Express, mari lihat cara membuat aplikasi yang serupa dengan apa yang kami tulis sebelum ini:


aplikasi const = express()
port const = 3000 app.get(‘/’, (permintaan, respons) => (
response.send("Hello daripada Express!")
)) app.listen(port, (err) => (
jika (err) (
return console.log("sesuatu yang buruk berlaku", err)
) console.log(`pelayan sedang mendengar pada $(port)`)
})

Perbezaan terbesar yang mungkin anda perhatikan di sini ialah Express memberi anda penghala secara lalai. Anda tidak perlu menghuraikan URL secara manual untuk memutuskan perkara yang perlu dilakukan, sebaliknya anda menentukan penghalaan aplikasi dengan app.get , app.post , app.put dan sebagainya, dan ini sudah diterjemahkan ke dalam permintaan HTTP yang sesuai.

Salah satu konsep paling berkuasa yang Express laksanakan ialah corak Middleware.

Middleware — pemproses perantaraan

Anda boleh menganggap perisian tengah sebagai saluran paip Unix, tetapi untuk permintaan HTTP.

Dalam rajah anda boleh melihat bagaimana permintaan itu melalui aplikasi Ekspres bersyarat. Ia melalui tiga pemproses perantaraan. Setiap pengendali boleh mengubah suai permintaan ini, dan kemudian, berdasarkan logik perniagaan anda, perisian tengah ketiga akan menghantar respons atau permintaan akan pergi ke pengendali laluan yang sepadan.

Dalam amalan anda boleh melakukannya seperti ini:

Const express = memerlukan("express")
const app = express() app.use((permintaan, respons, seterusnya) => (
console.log(request.headers)
seterusnya()
)) app.use((permintaan, respons, seterusnya) => (
request.chance = Math.random()
seterusnya()
)) app.get("/", (permintaan, respons) => (
response.json((
peluang: permintaan.peluang
})
)) app.listen(3000)

Perkara yang perlu diperhatikan di sini:

  • app.use: Beginilah cara anda boleh menerangkan perisian tengah. Kaedah ini mengambil fungsi dengan tiga parameter, yang pertama ialah permintaan, yang kedua ialah respons, dan yang ketiga ialah panggilan balik seterusnya. Memanggil isyarat seterusnya Nyatakan bahawa ia boleh beralih ke perisian tengah seterusnya.
  • Perisian tengah pertama hanya mencatatkan pengepala dan segera memanggil yang seterusnya.
  • Yang kedua menambahkan sifat tambahan pada permintaan — ini adalah salah satu ciri yang paling berkuasa bagi templat middleware. Perisian tengah anda boleh menambah data tambahan pada objek permintaan, yang boleh dibaca/diubah suai oleh perisian tengah di bawah.

Ralat pemprosesan

Seperti semua rangka kerja, pengendalian ralat yang betul adalah kritikal. Dalam Express, anda mesti mencipta perisian tengah khas dengan empat parameter input:

Const express = memerlukan('express')
const app = express() app.get(‘/’, (permintaan, respons) => (
buang Ralat baharu('oops')
)) app.use((err, request, response, next) => (
// log ralat, hanya console.log buat masa ini
console.log(err)
respons.status(500).send('Sesuatu rosak!')
)) app.listen(3000)

Perkara yang perlu diperhatikan di sini:

  • Pengendali ralat mestilah fungsi terakhir yang ditambahkan melalui app.use .
  • Pengendali ralat menerima panggilan balik seterusnya. Ia boleh digunakan untuk menggabungkan berbilang pengendali ralat.

Penyampaian HTML

Sebelum ini, kami melihat cara menghantar respons JSON. Sudah tiba masanya untuk belajar cara membuat HTML dengan cara yang mudah. Untuk melakukan ini, kami akan menggunakan pakej bar hendal dengan pembalut bar hendal ekspres.

Pertama, mari buat struktur direktori berikut:

├── index.js
└──pandangan
├──home.hbs
└── susun atur
└── utama.hbs

Selepas itu, isi index.js dengan kod berikut:

//index.js
laluan const = memerlukan("laluan")
const express = memerlukan("express")
const exphbs = memerlukan("express-handlebars")
aplikasi const = express() app.engine(".hbs", exphbs((
defaultLayout: "utama",
extname: ".hbs",
layoutsDir: path.join(__dirname, "views/layouts")
}))
app.set("lihat enjin", ".hbs")
app.set("views", path.join(__dirname, "views"))
app.listen(3000)

Kod di atas memulakan enjin bar hendal dan menetapkan direktori templat kepada paparan/reka letak . Ini ialah direktori tempat templat anda akan disimpan.

Sebaik sahaja anda telah melakukan persediaan ini, anda boleh meletakkan html awal anda dalam main.hbs . Untuk memudahkan urusan, mari kita teruskan:



Hendal ekspres


(((badan)))



Anda mungkin melihat label (((badan))) — kandungan anda akan disiarkan di sini. Jom buat home.hbs!

Hello ((nama))

Perkara terakhir yang perlu kita lakukan untuk membuat ini semua berfungsi ialah menambah pengendali laluan ke aplikasi Express kami:

App.get("/", (permintaan, respons) => (
response.render("home", (
nama: "John"
})
})

Kaedah render mengambil dua parameter:

  • Yang pertama ialah nama templat.
  • Yang kedua ialah data yang diperlukan untuk rendering.

Sebaik sahaja anda membuat permintaan ke alamat ini, anda akan menerima sesuatu seperti ini:



Hendal ekspres


Hello John





Ini hanyalah puncak gunung ais. Untuk mengetahui cara menambah lebih banyak templat (dan juga templat separa), sila rujuk dokumentasi bar pemegang ekspres rasmi.

Menyahpepijat Ekspres

Dalam sesetengah kes, anda mungkin perlu memikirkan perkara yang berlaku dengan Express semasa aplikasi sedang berjalan. Untuk melakukan ini, anda boleh menghantar pembolehubah persekitaran berikut kepada Express: DEBUG=express* .

Anda harus memulakan pelayan HTTP Node.js anda menggunakan:

$ DEBUG=express* nod index.js

Ringkasan

Begini cara anda boleh menyediakan pelayan HTTP Node.js pertama anda dari awal. Saya syorkan Express untuk bermula dengan dan kemudian mencuba.

Express ialah rangka kerja web popular yang ditulis dalam JavaScript dan berjalan di dalam masa jalan node.js. Modul ini merangkumi beberapa faedah utama rangka kerja ini, menyediakan persekitaran pembangunan, dan melaksanakan pembangunan web asas dan tugas penempatan.

Prasyarat

Sebelum memulakan modul ini, anda perlu mempunyai idea tentang apa pengaturcaraan pelayan dan rangka kerja web, sebaik-baiknya daripada membaca artikel dalam modul lain Langkah pertama pengaturcaraan tapak web sebelah pelayan. Kebiasaan dengan konsep pengaturcaraan asas dan bahasa pengaturcaraan JavaScript akan sangat membantu, tetapi tidak diperlukan untuk memahami konsep asas modul ini.

nota itu: Laman web ini mengandungi banyak sumber untuk mempelajari JavaScript dalam konteks pembangunan sisi pelanggan: JavaScript, Panduan JavaScript, Asas JavaScript, JavaScript (pembelajaran). Ciri dan Konsep Utama bahasa JavaScript kekal serupa untuk pembangunan sisi pelayan pada Node.js dan bahan yang digunakan agak relevan. Node.js menyediakan API tambahan untuk menyediakan fungsi yang berguna untuk pembangunan "tanpa penyemak imbas", i.e. untuk membuat pelayan HTTP dan akses sistem fail, tetapi tidak menyokong API JavaScript untuk bekerja dengan penyemak imbas dan DOM.

Panduan ini akan memberi anda beberapa maklumat tentang bekerja dengan Node.js dan Express, tetapi terdapat juga banyak sumber lain yang sangat baik di Internet dan buku - sebahagian daripadanya tersedia daripada topik Bagaimana saya boleh bermula dengan Node.js (StackOverflow ) dan (Quora) .

Pemandu

Pengenalan kepada Express/Node Dalam artikel pertama tentang Express, kami akan menjawab soalan "Apakah Node?" dan "Apakah Express?" dan memberi anda gambaran tentang perkara yang menjadikan rangka kerja web Express istimewa. Kami akan merangkumi ciri utama dan menunjukkan kepada anda beberapa blok binaan asas Aplikasi ekspres(walaupun pada masa ini anda belum mempunyai persekitaran pembangunan untuk mengujinya). Menyediakan persekitaran pembangunan Nod (Express).

Setelah anda mengetahui apa itu Express, kami akan menunjukkan kepada anda cara menyediakan dan menguji persekitaran pembangunan Node/Express pada Windows, Linux (Ubuntu) dan Mac OS X. Tidak kira apa yang popular sistem operasi anda menggunakan artikel iniakan memberi anda apa yang anda perlukan untuk mula membangunkan aplikasi Express.

Buku Teks Ekspres: laman web LocalLibrary

Artikel pertama dalam siri praktikal kami menerangkan perkara yang akan anda pelajari dan memberikan gambaran keseluruhan tapak web "perpustakaan tempatan" yang akan kami usahakan dan bangunkan dalam artikel seterusnya.

Tutorial Ekspres Bahagian 2: Mencipta Rangka Laman Web

Artikel ini menunjukkan cara anda boleh membuat "rangka"laman web, yang kemudiannya boleh diisi menggunakan laluan tapak, templat/pandangan dan pangkalan data.

Tutorial Ekspres Bahagian 3: Menggunakan Pangkalan Data (dengan Mongoose) Artikel ini memperkenalkan secara ringkas pangkalan data untuk Node/Express. Ia kemudian menunjukkan cara kami boleh menggunakan Mongoose untuk menyediakan akses pangkalan data untuk tapak tersebut Perpustakaan Tempatan. Pelajaran ini menerangkan cara mengisytiharkan gambar rajah objek dan model, jenis medan asas dan pengesahan asas. Beberapa cara utama untuk mengakses data model juga ditunjukkan secara ringkas. Tutorial Ekspres Bahagian 4: Laluan dan Pengawal Dalam tutorial ini, kami akan mencipta laluan (kod pengendalian URL) dengan pengendali fungsi "dummy" untuk semua titik akhir sumber yang akhirnya kami perlukan untuk tapak Perpustakaan Tempatan. Setelah selesai, kami akan mempunyai struktur modular untuk kod pengendalian laluan kami, yang boleh kami lanjutkan dengan fungsi pengendali sebenar dalam artikel akan datang. Kami juga akan mendapat pemahaman yang sangat baik tentang cara membuat laluan modular menggunakan Express. Tutorial Ekspres Bahagian 5: Memaparkan Data Perpustakaan Kini kami bersedia untuk menambah halaman yang akan memaparkan buku tapak web Perpustakaan Tempatan dan data lain. Halaman akan termasuk halaman rumah, yang menunjukkan bilangan rekod jenis tertentu kita ada dan halaman berasingan untuk melihat rakaman secara terperinci. Sepanjang perjalanan kita akan dapat pengalaman praktikal dalam mendapatkan semula rekod daripada pangkalan data dan menggunakan templat. Tutorial Ekspres Bahagian 6: Bekerja dengan Borang Dalam bahagian ini kami akan menunjukkan kepada anda cara bekerja dengan borang HTML dalam Express menggunakan Pug, dan khususnya cara mencipta, mengemas kini dan memadam dokumen daripada pangkalan data. Tutorial Ekspres Bahagian 7: Susun atur dalam Pengeluaran Sekarang anda telah mencipta laman web yang menakjubkan Perpustakaan Tempatan, anda perlu memasangnya pada pelayan awam supaya ia boleh memberi kakitangan perpustakaan dan pengguna akses kepada Internet. Artikel ini memberikan gambaran keseluruhan tentang cara anda boleh mencari hos untuk menggunakan tapak anda dan perkara yang perlu anda lakukan untuk menyediakan tapak anda untuk diterbitkan. Memasang LocalLibrary pada PWS/Cloud Foundry Artikel ini menyediakan demonstrasi langsung tentang cara memasang Perpustakaan Tempatan di awan Pivotal Web Services PaaS ialah alternatif sumber terbuka berciri penuh kod sumber untuk Heroku, perkhidmatan awan PaaS yang digunakan dalam Bahagian 7 tutorial ini yang dibentangkan di atas. PWS/Cloud Foundry sememangnya patut dicuba jika anda mencari alternatif kepada Heroku (atau PaaS lain perkhidmatan awan), atau hanya mahu mencuba sesuatu yang berbeza.

Melihat corak sintaks, jika kami ingin menambah laluan baharu pada aplikasi, kami hanya boleh melakukan sesuatu seperti berikut:

Router.get("/app", function(req, res) ( res.render("app", ( tajuk: "Express" )); ));

Adakah ini laluannya? Adakah ini pengawal?

Perkara yang paling menarik ialah laluan adalah fungsi yang mengandungi logik. Di dalam laluan terdapat fungsi res.render:

Res.render("foo", ( tajuk: "Express" ));

Dalam templat paparan kita melihat ini:

H1= tajuk p Selamat datang ke #(tajuk)

Ini adalah dua contoh bagaimana kita boleh menarik data daripada pengawal/laluan dan memaparkannya dalam paparan. Dalam contoh ini kami mengeluarkan HTML:

Ekspres

Selamat datang ke Express

Ini semua nampaknya berpunca daripada masalah - bolehkah laluan juga mengandungi maklumat pengawal? Ini adalah benar, itulah sebabnya terdapat pergerakan dalam komuniti untuk menukar nama folder daripada laluan kepada pengawal.

Contoh hebat ini boleh dilihat dalam contoh Express MVC.

Tetapi demi konsistensi, kami akan berpegang pada konvensyen semasa dalam panduan ini.

404 ralat

Ralat telah menghantar anda ke Express. Fail app.js mempunyai yang berikut:

/// tangkap 404 dan ubah hala ke app.use pengendali ralat(function(req, res, next) ( var err = new Ralat("Tidak dijumpai"); err.status = 404; seterusnya(err); ));

Terdapat errors.jade dalam paparan/ folder.

Memanjangkan kandungan blok reka letak h1= mesej h2= error.status pra #(error.stack)

Mudah sahaja. Jika anda ingin menyesuaikan halaman 404 anda, kemudian edit sahaja paparan ini.