2015-12-08 2 views
0

У меня есть вопрос о маршрутизации в sails.js. Итак, я следую инструкциям о создании страницы входа в систему. она состоит из AuthController.jsЗадание маршрутов в sailsjs

module.exports = { 
    login: function(req , res){ 
     res.view('login'); //view login page 
    }, 

    authenticate: function(req, res) { 
     //some auth function 
    } 
}; 

login.ejs

<div id="login"> 
    <form align="center" action="/login" method="post"> 
    <ul> 
     <li> 
     <input type="text" name="username" placeholder="Username"></li> 
     <li> 
     <input type="password" name="password" placeholder="Password" ></li> 
     <li> 
     <input type="submit" value="Log In"></li> 
    </ul> 
    </form> 
</div> 

и, наконец, это то, что заставляет меня запутаться в routes.js. почему это работает?

'get /login': { 
    controller: 'AuthController', 
    action: 'login' 
    }, 

    'post /login' : { 
    controller: 'AuthController', 
    action: 'authenticate' 
    }, 

но это не (я удалил получить)?

'/login': { 
    controller: 'AuthController', 
    action: 'login' 
    }, 

    'post /login' : { 
    controller: 'AuthController', 
    action: 'authenticate' 
    }, 

, когда я использую позже маршрут, кажется, что authentication действие никогда не вызывается, когда я ввести имя пользователя пароль, и это просто перенаправляет меня на страницу входа в систему еще раз (это звонит login действие вместо этого).

ответ

3

От sails documentation:

If no verb is specified, the target will be applied to any request that matches 
the path, regardless of the HTTP method used (GET, POST, PUT etc.). 


URLs are matched against addresses in the list from the top down. 

также порядок работы сверху вниз. Поэтому, когда вы пытаетесь выполнить POST в /login, он снова переходит к /login, а не к POST /login.

Надеюсь, это поможет.

0

В парусах Js route.js состоит из адреса (слева, например, «get/login») и цели (справа, например, «AuthController.login»). Адрес - это путь URL и (необязательно) определенный HTTP-метод. Когда Sails получает входящий запрос, он проверяет адрес всех настраиваемых маршрутов для совпадений. Если найден соответствующий маршрут, запрос затем передается его цели.

Теперь, когда вы удалите опцию ПОЛУЧИТЬ, & поднять ваше приложение, & перейдите в каталог/логин, первую страницу Войти визуализируется, но когда форма размещена, она не может дифференцировать/б запросов, как вы опустили получить запрос, поэтому он снова вызывает/login & никогда не достигают по маршруту сообщения.

Ссылка: http://sailsjs.org/documentation/concepts/routes

1

Как уже сказал, это потому, что маршруты по сравнению с тем, запуская в зависимости от того соответствует первым.

Интересно, что означает, что если вы поменять порядок, он работает, как вы описали:

'post /login' : { 
    controller: 'AuthController', 
    action: 'authenticate' 
}, 
'/login': { 
    controller: 'AuthController', 
    action: 'login' 
},