Black Lives Matter. Support the Equal Justice Initiative.

Bu dok├╝man ingilizce dok├╝mana g├Âre eski olabilir. Son g├╝ncellemeler i├žin l├╝tfen ─░ngilizce Dok├╝man─▒. ziyaret edin

Ôťľ

Y├Ânlendirme

Routing uygulama biti┼č noktalar─▒n─▒n tan─▒m─▒n─▒ (URIÔÇÖler) ve istemci isteklerine nas─▒l yan─▒t verdiklerini ifade eder. Y├ÂnlendirmeÔÇÖye giri┼č i├žin, [Temel y├Ânlendirme] sayfas─▒na bak─▒n─▒z.(/tr/starter/basic-routing.html).

HTTP metod isimlerine kar┼č─▒l─▒k gelen Express app objesinin metodlar─▒n─▒ kullanarak y├Ânlendirmeleri tan─▒mlayabilirsiniz; ├Ârne─čin, GET isteklerini i┼člemek i├žin app.get() ve POST isteklerini i┼člemek i├žin de app.post() kullanmak gibi. Tam liste i├žin bak─▒n─▒z app.METHOD. B├╝t├╝n HTTP metodlar─▒n─▒ i┼člemek i├žin app.all(), ve geri ├ža─č─▒rma fonksiyonu olarak da ara yaz─▒l─▒m tan─▒mlamak i├žin app.use() kullanabilirsiniz (Daha fazla detay i├žin bak─▒n─▒z Ara yaz─▒l─▒m kullanmak).

Bu y├Ânlendirme metodlar─▒, uygulaman─▒n belirtilen bir rotaya (biti┼č noktas─▒) ve HTTP metoduna ald─▒─č─▒ isteklerde ├ža─čr─▒lan bir geri ├ža─č─▒rma fonksiyonu belirtirler (bazen ÔÇťi┼čleyici fonksiyonlarÔÇŁ olarak isimlendirilirler). Ba┼čka bir deyi┼čle, uygulama, belirtilen rota(lar) ve metod(lar) ile e┼čle┼čen istekleri ÔÇťdinlerÔÇŁ, ve bir e┼čle┼čme alg─▒lad─▒─č─▒nda, ilgili geri ├ža─č─▒rma fonksiyonunu ├ža─č─▒r─▒r.

Asl─▒nda y├Ânlendirme metodlar─▒ birden fazla geri ├ža─č─▒rma fonksiyonunu arg├╝man olarak alabilir. Birden fazla geri ├ža─č─▒rma fonksiyonu oldu─čunda, bir sonraki fonksiyona kontrol├╝ vermek i├žin geri ├ža─č─▒rma fonksiyonuna nextÔÇÖ arg├╝man─▒n─▒ verip, geri ├ža─č─▒rma fonksiyonunun i├žinde next() metodunu ├ža─č─▒rmak ├Ânemlidir.

A┼ča─č─▒daki kod ├žok temel bir rota ├Ârne─čidir.

var express = require('express')
var app = express()

// anasayfaya bir GET iste─či yap─▒ld─▒─č─▒nda "merhaba d├╝nya" ile yan─▒t verir
app.get('/', function (req, res) {
  res.send('merhaba d├╝nya')
})

Rota metodlar─▒

Bir rota metodu, HTTP metodlar─▒n─▒n birinden t├╝retilir ve express s─▒n─▒f─▒n─▒n bir ├Ârne─čine eklenir.

A┼ča─č─▒daki kod uygulaman─▒n k├Âk├╝ne GET ve POST metodlar─▒ i├žin tan─▒mlanan rotalara bir ├Ârnektir.

// GET metodu rotas─▒
app.get('/', function (req, res) {
  res.send('anasayfaya GET iste─či')
})

// POST metodu rotas─▒
app.post('/', function (req, res) {
  res.send('anasayfaya POST iste─či')
})

Express, HTTP metodlar─▒na kar┼č─▒l─▒k gelen bu y├Ânlendirme metodlar─▒n─▒ destekler: get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search, ve connect.

Ge├žersiz JavaScript de─či┼čken adlar─▒na denk gelen metodlar─▒ y├Ânlendirmek i├žin k├Â┼čeli parantez notasyonunu kullan─▒n─▒z. ├ľrne─čin, app['m-search']('/', function ...

Hi├žbir HTTP metodundan t├╝remeyen ├Âzel bir y├Ânlendirme metodu olan app.all() mevcut. bu metod, t├╝m istek metodlar─▒ i├žin bir yolda ara katman yaz─▒l─▒m(middleware) fonksiyonlar─▒n─▒ y├╝klemek i├žin kullan─▒l─▒r.

Bir sonraki ├Ârnekte, ÔÇť/secretÔÇŁ rotas─▒na yap─▒lan isteklerde, GET, POST, PUT, DELETE veya http mod├╝l├╝ÔÇśnde desteklenen herhangi bir HTTP istek metodu farketmeksizin bu i┼čleyici ├žal─▒┼čt─▒r─▒lacak.

app.all('/secret', function (req, res, next) {
  console.log('Gizli b├Âl├╝mlere eri┼čiliyor...')
  next() // bir sonraki i┼čleyiciye kontrol├╝ verir
})

Rota yollar─▒

Rota yollar─▒, bir istek metoduyla birlikte, isteklerin yap─▒labilece─či biti┼č noktalar─▒n─▒ tan─▒mlar. Rota yollar─▒ karakter dizini, karakter dizin modeli veya d├╝zenli ifadeler(reqular expression) olabilir.

?, +, *, ve () karakterleri d├╝zenli ifade kar┼č─▒l─▒klar─▒n─▒n alt k├╝meleridir. Tire (-) ve nokta (.) karakter-dizisi tabanl─▒ yollar taraf─▒ndan olduklar─▒ gibi de─čerlendirilir.

E─čer dolar karakterini ($) bir karakter dizini yolunda kullanma ihtiyac─▒n─▒z olursa, ([ ve ]) karakterlerinin i├žinde kullan─▒n─▒z. ├ľrne─čin, ÔÇť/data/$bookÔÇŁ istekleri i├žin dizin yolu bu ┼čekilde olur: ÔÇť/data/([\$])bookÔÇŁ.

Express, rota yollar─▒n─▒ e┼čle┼čtirmek i├žin path-to-regexp kullan─▒r; rota tan─▒mlamadaki b├╝t├╝n olas─▒l─▒klar─▒ ├Â─črenmek i├žin path-to-regexp d├Âk├╝mantasyonuna bak─▒n─▒z. Basit Express rotalar─▒n─▒ test etmek i├žin Express Route Tester kullan─▒┼čl─▒ bir ara├žt─▒r, ancak bu ara├ž model e┼čle┼čtirmeyi desteklememektedir.

Sorgu dizeleri rota yolunun bir par├žas─▒ de─čillerdir.

Karakter dizininlerine dayal─▒ baz─▒ rota yollar─▒ ├Ârnekleri.

Bu rota yolu, istekleri k├Âk rotaya e┼čle┼čtirecek, /.

app.get('/', function (req, res) {
  res.send('root')
})

Bu rota yolu istekleri /about ile e┼čle┼čtirecek

app.get('/about', function (req, res) {
  res.send('about')
})

Bu rota yolu istekleri /random.text ile e┼čle┼čtirecek

app.get('/random.text', function (req, res) {
  res.send('random.text')
})

A┼ča─č─▒da, dizin modellerine dayal─▒ rota yollar─▒n─▒n baz─▒ ├Ârnekleri verilmi┼čtir.

Bu rota yolu, acd ve abcd ile e┼čle┼čecek.

app.get('/ab?cd', function (req, res) {
  res.send('ab?cd')
})

Bu rota yolu, abcd, abbcd, abbbcd vb. ile e┼čle┼čecek.

app.get('/ab+cd', function (req, res) {
  res.send('ab+cd')
})

Bu rota yolu, abcd, abxcd, abRANDOMcd, ab123cd vb. ile e┼čle┼čecek.

app.get('/ab*cd', function (req, res) {
  res.send('ab*cd')
})

Bu rota yolu, /abe ve /abcde ile e┼čle┼čecek.

app.get('/ab(cd)?e', function (req, res) {
  res.send('ab(cd)?e')
})

D├╝zenli ifadelere dayal─▒ rota yollar─▒ ├Ârnekleri:

Bu rota yolu, rota isminde ÔÇťaÔÇŁ karakteri olan herhangi bir ┼čey ile e┼čle┼čecek.

app.get(/a/, function (req, res) {
  res.send('/a/')
})

Bu rota yolu butterfly ve dragonfly ile e┼čle┼čir, ancak butterflyman, dragonflyman vb. ile de─čil.

app.get(/.*fly$/, function (req, res) {
  res.send('/.*fly$/')
})

Rota parametreleri

Rota parametreleri, URLÔÇÖdeki konumlar─▒nda belirtilen de─čerleri yakalamak i├žin kullan─▒lan adland─▒r─▒lm─▒┼č URL b├Âl├╝mleridir. Yakalanan de─čerler, yolda belirtilen rota parameterlerinin ilgili isimlerini alarak req.params objesinde tutulur.

Rota yolu: /users/:userId/books/:bookId
─░Stek URL'i: http://localhost:3000/users/34/books/8989
req.params: { "userId": "34", "bookId": "8989" }

Parametreli rota tan─▒mlamak i├žin, a┼ča─č─▒da g├Âsterildi─či gibi rota parametrelerini rotan─▒n yolunda belirtmeniz yeterlidir.

app.get('/users/:userId/books/:bookId', function (req, res) {
  res.send(req.params)
})

Rota parametrelerinin isimleri sadece ÔÇťkelime karakterleriÔÇŁ i├žermelidir ([A-Za-z0-9_]).

Tire (-) ve nokta (.) olduklar─▒ gibi de─čerlendirildikleri i├žin, kullan─▒┼čl─▒ ama├žlar i├žin rota parametrelerinde kullan─▒labilirler.

Rota yolu: /flights/:from-:to
─░tek URL'i: http://localhost:3000/flights/LAX-SFO
req.params: { "from": "LAX", "to": "SFO" }
Rota yolu: /plantae/:genus.:species
─░stek URL'i: http://localhost:3000/plantae/Prunus.persica
req.params: { "genus": "Prunus", "species": "persica" }

Bir rota parametresiyle e┼čle┼čen dizin ├╝zerinde daha fazla kontrole sahip olmak i├žin, parantez i├žinde (()) d├╝zenli ifade ekleyebilirsiniz:

Rota yolu: /user/:userId(\d+)
─░stek URL'i: http://localhost:3000/user/42
req.params: {"userId": "42"}

D├╝zenli ifadeler genellikle tam bir dizenin par├žalar─▒ olduklar─▒ i├žin, \ karakterlerinden ek olarak ters e─čik ├žizgi ile ka├žt─▒─č─▒n─▒zdan emin olun, ├Ârne─čin \\d+.

Express 4.xÔÇÖte, d├╝zenli ifadelerdeki * karakteri normal durumlardaki gibi de─čerlendirilmiyor. Ge├žici ├ž├Âz├╝m olarak, * karakteri yerine{0,} karakterini kullan─▒n─▒z. Bu muhtemelen Express 5ÔÇÖte d├╝zeltilecektir.

Rota i┼čleyicileri

Bir iste─či i┼člemek i├žin, ara-katman gibi davranan birden fazla geri ├ža─č─▒rma fonksiyonu sa─člayabilirsiniz. Bunun tek istisnas─▒, bu geri ├ža─č─▒rmalar, arda kalan rota metodlar─▒n─▒ atlatmak i├žin next('route') metodunu ├ža─č─▒rabilir. Bir rotaya ├Ân ko┼čullar uygulamak i├žin bu mekanizmay─▒ kullanabilirsiniz, ve sonra ge├žerli rotaya devam etmek i├žin bir neden yoksa kontrol├╝ sonraki rotalara aktarabilirsiniz.

Rota i┼čleyicileri, a┼ča─č─▒daki ├Ârneklerde g├Âsterildi─či gibi bir fonksiyon, fonksiyonlar dizisi veya her ikisinin birle┼čimi bi├žiminde olabilir.

Bir geri ├ža─č─▒rma fonksiyonu, bir rotay─▒ i┼čleyebilir. ├ľrne─čin:

app.get('/example/a', function (req, res) {
  res.send('A\'dan merhaba')
})

Birden fazla geri ├ža─č─▒rma fonksiyonu bir rotay─▒ i┼čleyebilir (next objesini belirtti─činizden emin olun). ├ľrne─čin:

app.get('/example/b', function (req, res, next) {
  console.log('yan─▒t bir sonraki fonksiyon taraf─▒ndan g├Ânderilecek')
  next()
}, function (req, res) {
  res.send('B\'den merhaba')
})

Geri ├ža─č─▒rma fonksiyonlar─▒ dizini bir rotay─▒ i┼čleyebilir. ├ľrne─čin:

var cb0 = function (req, res, next) {
  console.log('Geri ├ža─č─▒rma 0')
  next()
}

var cb1 = function (req, res, next) {
  console.log('Geri ├ža─č─▒rma 1')
  next()
}

var cb2 = function (req, res) {
  res.send('C\'den merhaba')
}

app.get('/example/c', [cb0, cb1, cb2])

Ba─č─▒ms─▒z fonksiyonlar ve fonksiyon dizilerinin bir kombinasyonu bir rotay─▒ i┼čleyebilir. ├ľrne─čin:

var cb0 = function (req, res, next) {
  console.log('Geri ├ža─č─▒rma 0')
  next()
}

var cb1 = function (req, res, next) {
  console.log('Geri ├ža─č─▒rma 1')
  next()
}

app.get('/example/d', [cb0, cb1], function (req, res, next) {
  console.log('yan─▒t bir sonraki fonksiyon taraf─▒ndan g├Ânderilecek')
  next()
}, function (req, res) {
  res.send('D\'den merhaba')
})

Yan─▒t metodlar─▒

A┼ča─č─▒daki tabloda yan─▒t nesnesindeki (res) metodlar istemciye yan─▒t g├Ânderebilir ve istek-yan─▒t d├Âng├╝s├╝n├╝ sonland─▒rabilir. Bu metodlardan hi├žbiri bir rota i┼čleyiciden ├ža─čr─▒lmazsa, istemci iste─či as─▒l─▒ kal─▒r.

Metod A├ž─▒klama
res.download() Bir dosyan─▒n indirilmesini iste.
res.end() Yan─▒t s├╝recini sonland─▒r.
res.json() JSON yan─▒t─▒ g├Ânder.
res.jsonp() JSONP destekli bir JSON yan─▒t─▒ g├Ânder
res.redirect() Bir iste─či yeniden y├Ânlendir.
res.render() Bir g├Âr├╝n├╝m ┼čablonu g├Âr├╝nt├╝le.
res.send() ├çe┼čitli tiplerde yan─▒t g├Ânder.
res.sendFile() Dosyay─▒ sekizli ak─▒┼č olarak g├Ânder.
res.sendStatus() Yan─▒t durum kodunu ayarla ve karakter dize temsilini yan─▒t g├Âvdesi olarak g├Ânder.

app.route()

Bir rota yolu i├žin app.route() kullanarak zincirlenebilir rota i┼čleyicileri olu┼čturabilirsiniz. Yol tek bir konumda belirtildi─činden, fazlal─▒k ve yaz─▒m hatalar─▒n─▒ azaltmak i├žin mod├╝ler rotalar olu┼čturmak yararl─▒d─▒r. Rotalar hakk─▒nda daha fazla bilgi i├žin, bak─▒n─▒z: Router() d├Âk├╝mantasyonu.

Burada app.route() kullan─▒larak tan─▒mlanan zincirleme rota i┼čleyicilerine bir ├Ârnek verilmi┼čtir.

app.route('/book')
  .get(function (req, res) {
    res.send('Rastgele bir kitap getir')
  })
  .post(function (req, res) {
    res.send('Bir kitap ekle')
  })
  .put(function (req, res) {
    res.send('Kitab─▒ g├╝ncelle')
  })

express.Router

Mod├╝ler, monte edilebilir rota i┼čleyicileri olu┼čturmak i├žin express.Router s─▒n─▒f─▒n─▒ kullan─▒n. Bir Router s─▒n─▒f─▒ ├Ârne─či tam bir ara katman yaz─▒l─▒m ve y├Ânlendirme sistemidir; bu nedenle, s─▒kl─▒kla ÔÇťmini-uygulamaÔÇŁ olarak bilinir.

A┼ča─č─▒daki ├Ârnek, bir y├Ânlendiriciyi mod├╝l olarak olu┼čturur, i├žine bir ara katman yaz─▒l─▒m─▒ fonksiyonu y├╝kler, baz─▒ rotalar─▒ tan─▒mlar ve y├Ânlendirici mod├╝l├╝n├╝ ana uygulamadaki bir yola ba─člar.

Uygulama dizininde a┼ča─č─▒daki i├žeri─če sahip birds.js adl─▒ bir y├Ânlendirici dosyas─▒ olu┼čturun:

var express = require('express')
var router = express.Router()

// bu y├Ânlendiriciye ├Âzel ara katman yaz─▒l─▒m
router.use(function timeLog (req, res, next) {
  console.log('Time: ', Date.now())
  next()
})
// anasayfa rotas─▒ tan─▒mla
router.get('/', function (req, res) {
  res.send('Birds home page')
})
// define the about route
router.get('/about', function (req, res) {
  res.send('About birds')
})

module.exports = router

Daha sonra, y├Ânlendirici mod├╝l├╝n├╝ uygulamada y├╝kle:

var birds = require('./birds')

// ...

app.use('/birds', birds)

Uygulama art─▒k /birds ve /birds/about isteklerini i┼čleyebilece─či gibi, rotaya ├Âzg├╝ timeLog ara katman yaz─▒l─▒m─▒ fonksiyonunu da ├ža─č─▒rabilecektir.