2016-06-21 2 views
0

Я использую Коа реализовать приложения, я хочу осуществить до фильтра, как и before_action в ruby on rails:как реализовать перед фильтром в кадровой обработке koa?

class UsersController < ApplicationController 
    before_action :logged_in_user, only: [:edit, :update] 

    # Before filters 

    # Confirms a logged-in user. 
    def logged_in_user 
     unless logged_in? 
     flash[:danger] = "Please log in." 
     redirect_to login_url 
     end 
    end 
end 

одна вещь, чтобы указать на то, что я не хочу, чтобы фильтровать все APIs, лишь некоторые из их, что-то вроде update_userdelete_user.

ответ

1

Вы использовали бы промежуточное программное обеспечение.

const app = require('koa')(); 
const router = require('koa-router')(); 

function * ensureLoggedIn (next) { 
    if (!this.currentUser) { 
    this.redirect('/login') 
    return 
    } 
    // If we get this far, then we know the user is logged in and 
    // we can yield to the downstream routes. 
    yield * next 
} 

router.get('/users', function *() {...}) 
router.get('/users/:id/edit', ensureLoggedIn, function *() {...}) 
router.post('/user/:id', ensureLoggedIn, function *() {...}) 

app.use(router.routes()).listen(3000) 

Это самый общий способ. В зависимости от используемой библиотеки маршрутизации могут быть другие варианты.

Например, koa-router позволяет реализовать промежуточное программное обеспечение, специфичное для маршрутизатора, которое выполняется только в том случае, если запрос соответствует маршрутизатору.

const unrestricted = require('koa-router')(); 
unrestricted.get('/users', function *() {...}) 

const loggedIn = require('koa-router')(); 
loggedIn.use(ensureLoggedIn) 
loggedIn.get('/users/:id/edit', function *() {...}) 
loggedIn.post('/user/:id', function *() {...}) 

app.use(unrestricted.routes()).use(loggedIn.routes()).listen(3000) 

Или вы можете использовать router.param(name, middleware) указать промежуточное программное обеспечение, которое будет работать только на маршруты с этим параметром URL:

const router = require('koa-router')(); 

// Only run the given middleware if the URL has the "id" parameter 
router.param('id', ensureLoggedIn, loadUser) 

router.get('/users', function *() {...}) 
router.get('/users/:id/edit', function *() {...}) // <-- 
router.post('/user/:id', function *() {...})  // <-- 

app.use(router.routes()).listen(3000) 
Смежные вопросы