Просматривая Stackoverflow, наблюдая за моими тегами, я заметил, что большинство новичков борются с шаблоном промежуточного программного обеспечения и с тем, как применить его к своему приложению, хотя они использовали его раньше с bodyparser и/ или другие инструменты.
Понимание промежуточного программного обеспечения и его эффективное использование не является сложной задачей. Давайте создадим очень простое промежуточное ПО для аутентификации и применим его к нашим маршрутам.
Прежде всего: аутентификация означает, что у нас должен быть какой-то источник правды, например. база данных. Это не будет частью этого небольшого примера, но я предполагаю, что существует множество руководств по базам данных.
Промежуточное программное обеспечение — это просто функция, которую можно применить к другой функции, которая выполняет функцию промежуточного программного обеспечения со своими собственными параметрами и передает ее результат себе. Легко, верно? Итак, давайте определим нашу промежуточную функцию:
const authenticate = (req, res, next) => { // parse the user - or anything else - // out of the request body. let user = req.body.user // do some checking if (user === database.user) { // user successfully authenticated -> call next, which // terminates the middleware-function and the parent // continues. next() ) // user didn't match any we know? Respond with authentication // failure. res.status(401); }
Очень просто. Теперь мы можем применить это промежуточное ПО к каждому маршруту нашего бэкенда. Поскольку мы работаем с объектами req
и res
, нет смысла применять его к другим функциям.
Теперь нам нужно решить, применять ли его ко всем нашим маршрутам или только к некоторым определенным.
// apply it to all routes app.use(authenticate) // apply it to a certain route app.get('/sensibledata', authenticate, (req, res) => { // only authenticated user will have access to the // following code - everyone else received a status // 401 to their request. res.send({ data: sensibleData }) }
Сделанный.