我对sails.js中的路由有疑问。 所以,我正在关注制作登录页面的教程。它包括 AuthController.js
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
动作)。
答案 0 :(得分:3)
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.
此顺序也是从上到下。因此,当您尝试在/login
中发帖时,它会再次转到/login
而不是POST /login
。
希望这会有所帮助。
答案 1 :(得分:1)
正如其他人所说,这是因为路线按顺序进行比较,先触发相应的匹配。
有趣的是,这意味着如果你交换订单,它就像你描述的那样工作:
'post /login' : {
controller: 'AuthController',
action: 'authenticate'
},
'/login': {
controller: 'AuthController',
action: 'login'
},
答案 2 :(得分:0)