У документах для express
модуля NodeJS приклад коду є app.use(...)
.
Що таке use
функція і де вона визначена?
У документах для express
модуля NodeJS приклад коду є app.use(...)
.
Що таке use
функція і де вона визначена?
Відповіді:
Об'єкт програми створений для створення експрес-сервера. Він має стек середнього програмного забезпечення, який можна налаштувати app.configure()
(це тепер застаріло у версії 4.x) .
Щоб налаштувати ваше проміжне програмне забезпечення, ви можете викликати app.use(<specific_middleware_layer_here>)
кожен рівень проміжного програмного забезпечення, який ви хочете додати (він може бути загальним для всіх шляхів або запускатись лише на певних (іх) трасах) вашого сервера), і він додаватиметься до вашого стека програмного забезпечення Express . Проміжні верстви можна додавати один за одним у декількох викликах use
або навіть усі відразу послідовно з одним викликом. Детальнішу інформацію див. У use
документації .
Щоб навести приклад концептуального розуміння програми Express Middleware, ось як виглядає мій стек середнього програмного забезпечення програми (app.stack) під час реєстрації мого об’єкта програми на консолі як JSON:
stack:
[ { route: '', handle: [Function] },
{ route: '', handle: [Function: static] },
{ route: '', handle: [Function: bodyParser] },
{ route: '', handle: [Function: cookieParser] },
{ route: '', handle: [Function: session] },
{ route: '', handle: [Function: methodOverride] },
{ route: '', handle: [Function] },
{ route: '', handle: [Function] } ]
Як ви могли б зробити висновок, я зателефонував app.use(express.bodyParser())
, app.use(express.cookieParser())
і т.д., який додав ці експрес-проміжні програми "шари" до стеку середнього програмного забезпечення. Зауважте, що маршрути порожні, це означає, що коли я додав ці проміжні шари, я вказав, що вони будуть запускатися в будь-якому маршруті. Якщо я додав спеціальний проміжний рівень, який запускається лише на шляху, /user/:id
який відображатиметься як рядок у route
полі цього об'єкта проміжного програмного забезпечення в роздрукуванні стека вище.
Кожен шар по суті додає функцію, яка спеціально обробляє щось у вашому потоці через проміжне програмне забезпечення.
Наприклад, додаючи bodyParser
, ви гарантуєте, що ваш сервер обробляє вхідні запити через експрес-проміжне програмне забезпечення . Отже, зараз аналіз тіла вхідних запитів є частиною процедури, яку здійснює ваше проміжне програмне забезпечення під час обробки вхідних запитів - все тому, що ви зателефонували app.use(bodyParser)
.
next()
зворотний виклик, який очікується, що кожне проміжне програмне забезпечення закликає передати обробку наступній функції в конвеєрі. Система маршрутизації (перший аргумент до app.use()
) дозволяє
use
це спосіб налаштування проміжного програмного забезпечення, що використовується маршрутами об’єкта сервера Express HTTP. Метод визначений як частина Connect, на якій заснований Express.
Оновлення Починаючи з версії 4.x, Express більше не залежить від Connect .
Функції проміжного програмного забезпечення, які раніше включалися в Express, тепер знаходяться в окремих модулях; див. перелік функцій проміжного програмного забезпечення .
app.use(function(){ var object = new SomeConstructor; next(); })
Кожна програма app.use (середнє програмне забезпечення) викликається кожного разу, коли запит надсилається на сервер.
app.use (), що використовується для кріплення функції середнього програмного забезпечення або для монтажу до визначеного шляху, функція середнього програмного забезпечення виконується, коли базовий шлях відповідає.
Наприклад: якщо ви використовуєте app.use () в indexRouter.js, наприклад:
//indexRouter.js
var adsRouter = require('./adsRouter.js');
module.exports = function(app) {
app.use('/ads', adsRouter);
}
У наведеному вище коді app.use () змонтуйте шлях на "/ ads" до adsRouter.js.
Тепер у adsRouter.js
// adsRouter.js
var router = require('express').Router();
var controllerIndex = require('../controller/index');
router.post('/show', controllerIndex.ads.showAd);
module.exports = router;
У adsRouter.js шлях буде таким, як для ads- '/ ads / show', і тоді він буде працювати відповідно до controllerIndex.ads.showAd ().
app.use ([шлях], зворотний дзвінок, [зворотний дзвінок]): ми можемо додати зворотний дзвінок на той же самий.
app.use('/test', function(req, res, next) {
// write your callback code here.
});
app.use () діє як проміжне програмне забезпечення в експрес-програмах. На відміну від app.get () і app.post () або близько того, ви фактично можете використовувати app.use (), не вказуючи URL-адресу запиту. У такому випадку, що це робиться, воно виконується щоразу, незалежно від того, яка URL-адреса потрапила.
app.use () працює так:
що дуже просто.
І лише тоді Express зробить решту речей, як маршрутизація.
app.use(function middleware1(req, res, next){
// middleware1 logic
}, function middleware1(req, res, next){
// middleware2 logic
}, ... middlewareN);
app.use - це спосіб зареєструвати проміжне програмне забезпечення або ланцюжок середніх (або декількох середніх) продуктів перед виконанням будь-якої логіки кінцевого маршруту або логіки посередництва маршруту залежно від порядку послідовності реєстрації середнього програмного забезпечення.
Посереднє програмне забезпечення: формує ланцюг функцій / проміжне програмне забезпечення з 3 параметрами req, res та next . Далі - зворотний виклик, який посилається на наступну функцію середнього програмного забезпечення в ланцюзі, а в разі останньої функції середнього програмного забезпечення ланцюга, наступний вказує на функцію першого середнього програмного забезпечення наступної зареєстрованої ланцюга середньої одиниці.
У експресі, якщо ми імпортуємо експрес з "express" і використовуємо app = express (); тоді додаток, що має всю функціональність експрес
якщо ми використовуємо app.use ()
з будь-якою функцією модуля / проміжного програмного забезпечення для використання в цілому експрес-проекті
app.use
це функція, яка вимагає проміжного програмного забезпечення. Наприклад:
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
Цей приклад показує функцію проміжного програмного забезпечення, встановлену на /user/:id
шляху. Ця функція виконується для будь-якого типу HTTP-запиту на /user/:id
шляху.
Він схожий на веб-сервер REST, просто використовуйте різні /xx
для представлення різних дій.
use
можна зробити експресом ; Мені просто потрібно було знати, що це було (і будь-які знання з контексту, щоб знати, як самому більше досліджувати).
app.use є типовим програмним забезпеченням для запиту програми. синтаксис
app.use('pass request format',function which contain request response onject)
приклад
app.use('/',funtion(req,res){
console.log(all request pass through it);
// here u can check your authentication and other activities.
})
також ви можете використовувати його у випадку маршрутизації вашого запиту.
app.use('/', roting_object);
Посереднє програмне забезпечення - це загальний термін для програмного забезпечення, яке служить для "склеювання", тому app.use - це метод налаштування середнього програмного забезпечення, наприклад: для розбору та обробки запиту: app.use (bodyParser.urlencoded ({розширений: вірно) })); app.use (bodyParser.json ()); Є багато середніх програм, які ви можете використовувати у своїй експрес-програмі, просто прочитайте документ: http://expressjs.com/en/guide/using-middleware.html
app.use застосовує вказане проміжне програмне забезпечення до основного стека програмного забезпечення середнього програмного забезпечення. Коли ви додаєте проміжне програмне забезпечення до основного стека додатків, порядок вкладення має значення; якщо ви встановите проміжне програмне забезпечення A перед середнім програмним забезпеченням B, то середнє програмне забезпечення A завжди буде виконане першим. Ви можете вказати шлях, для якого застосовується певне проміжне програмне забезпечення. У наведеному нижче прикладі "привіт світ" завжди буде реєструватися перед "щасливими святами".
const express = require('express')
const app = express()
app.use(function(req, res, next) {
console.log('hello world')
next()
})
app.use(function(req, res, next) {
console.log('happy holidays')
next()
})
Це дозволяє використовувати будь-який проміжне програмне забезпечення ( далі ) , як body_parser
, і CORS
т.д. Middleware може вносити зміни request
і response
об'єкти. Він також може виконати фрагмент коду.
Ви також можете створити власну функцію програмного забезпечення на зразок
app.use( function(req, res, next) {
// your code
next();
})
Він містить три параметри req
, res
, next
Ви можете також використовувати його для аутентифікації і перевірок вхідного Params тримати контролер в чистоті.
next()
використовується для переходу до наступного програмного забезпечення або маршруту.
Ви можете надіслати відповідь з програмного забезпечення
Прив’яжіть проміжне програмне забезпечення рівня додатка до екземпляра об’єкта програми за допомогою функцій app.use () та app.METHOD (), де METHOD - метод HTTP запиту, який обробляє функція середнього програмного забезпечення (наприклад, GET, PUT або POST) в малі літери.
Коротше кажучи, app.use () підтримує всі типи запитів [наприклад: отримати, опублікувати, ...], тому його в основному використовують для налаштування середнього програмного забезпечення. або їх можна використовувати, коли маршрути та функції відокремлені
приклад:
app.use("/test",functionName)
і functionName розташований в іншому файлі
app.use()
є проміжним методом.
Метод середнього програмного забезпечення - як перехоплювач у Java, цей метод завжди виконується для всіх запитів.
Призначення та використання проміжного програмного забезпечення: -
app.use
створюється за допомогою express (nodejs middleware Framework)
app.use - це використання для виконання будь-якого конкретного запиту в процесі
ініціалізації server.js (node)
var app = requ ('express');
тому в основному функція app.use викликається кожного разу при запуску сервера
app.use(bodyparser.json())
app.use - це програмне забезпечення рівня програм
Прив’яжіть проміжне програмне забезпечення рівня додатка до екземпляра об’єкта програми за допомогою функцій app.use () та app.METHOD (), де METHOD - метод HTTP запиту, який обробляє функція середнього програмного забезпечення (наприклад, GET, PUT або POST) в малі літери.
ви можете використовувати для перевірки всіх запитів, наприклад, ви хочете перевірити маркер / маркер доступу, вам потрібно написати проміжне програмне забезпечення, використовуючи app.use, щоб перевірити маркер у запиті.
Цей приклад показує функцію проміжного програмного забезпечення без шляху кріплення. Функція виконується кожного разу, коли додаток отримує запит.
var app = express()
app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
посилання з https://expressjs.com/en/guide/using-middleware.html
app.use (шлях, проміжне програмне забезпечення) використовується для виклику функції середнього програмного забезпечення, яку потрібно викликати до того, як трапляється маршрут для відповідного шляху. За допомогою програми app.use можна викликати кілька функцій посередництва.
app.use ('/ fetch', ExecuceAuthentication) -> ExecuceAuthentication середнє програмне забезпечення fn буде викликано, коли надійде запит, що починається з '/ fetch' . Це може бути / fetch / користувачів , / fetch / ids / {id} тощо
Деякі функції програмного забезпечення, можливо, доведеться викликати незалежно від запиту. У таких випадках шлях не вказується, і оскільки шлях за замовчуванням до / та кожного запиту починається з / , ця функція середнього програмного забезпечення буде викликана для всіх запитів.
app.use (() => {// Ініціалізувати загальну службу})
next () fn потрібно викликати в межах кожної функції проміжного програмного забезпечення, коли декілька функцій програмного забезпечення передаються в app.use , інакше наступна функція середнього програмного забезпечення не буде викликана.
довідка: http://expressjs.com/en/api.html#app.use
Примітка: У документації сказано , ми можемо перепускний проміжного програмного функцій після поточного, викликавши наступний ( «маршрут») в межах поточної функції проміжного програмного забезпечення , але цей метод не працював для мене в app.use але зробив роботу з app.METHOD , як показано нижче . Отже, fn1 і fn2 називались, але не fn3.
app.get('/fetch', function fn1(req, res, next) {
console.log("First middleware function called");
next();
},
function fn2(req, res, next) {
console.log("Second middleware function called");
next("route");
},
function fn3(req, res, next) {
console.log("Third middleware function will not be called");
next();
})