Express тереӊдетип: багыттоо жана middleware
Суроо-талап колдонмо аркылуу чын эле кандай өтөт - жана бул жолду кантип башкарса болот
app.get жана app.use чакырдыңыз, баары иштеди. Эми капоттун астын карайбыз. Express колдонмосу чындыгында конвейер: ар бир суроо-талап функциялардын иреттелген тизмеси - middleware жана маршрут иштеткичтери - аркылуу бирөө жооп жибергенче же ката ыргытылганча өтөт. Ушул конвейердин иретин өздөштүрсөңүз, баарын башкарасыз: аутентификация, журналдоо, талдоо, багыттоо жана каталарды иштетүү.
- middleware чынжырын жана
next()так милдетин түшүндүрө аласыз, - каттоонун ирети эмне үчүн маанилүү экенин так түшүнөсүз,
- маршруттарды
express.Router()менен модулдук файлдарга бөлө аласыз, - көп жана милдеттүү эмес маршрут параметрлерин окуй аласыз,
- борборлоштурулган ката иштеткич middleware (төрт аргументтүү) жаза аласыз.
1. Суроо-талап конвейери
app.use, app.get, app.post жана окшоштору аркылуу катталган ар бир функция бирдиктүү иреттелген стекке кошулат. Суроо-талап келгенде, Express бул стекти жогорудан ылдый карай өтүп, жолу жана методу дал келген ар бир функцияны иштетет. Башкарууну алган функция так үч жол менен уланта алат:
- Жооп жиберүү -
res.send,res.json,res.endж. б. чакыруу. Конвейер токтойт; ылдыйдагы эч нерсе иштебейт. next()чакыруу - башкарууну стектеги кийинки дал келген функцияга берүү.next(err)чакыруу - түз эле ката иштеткичке өтүү (5-бөлүмдө кеңири).
Кадимки middleware функциясынын кол тамгасы (req, res, next). Маршрут иштеткичи - бул жөн гана белгилүү методго жана жолго байланган middleware. Бул Expressтеги эң маанилүү ой-жүгүртүү модели: эч кандай сыйкыр жок, функциялардын иреттелген тизмеси гана.
Аналогия. Фабрикадагы чогултуу конвейерин элестетиңиз. Деталь (суроо-талап) лента боюнча станциялардын (middleware) катарынан өтөт. Ар бир станция детальды текшерип же өзгөртүп, аны next() менен алдыга узата алат, же даяр продукт жөнөтүп (res.send), лентадан такыр алып салат. Эгер станция акауну тапса, детальды четке кагуу науасына таштайт - бул next(err), жана бул наус бир өзгөчө станцияга алып барат: ката иштеткичке.