如何确保只在sails.js应用程序中调用一次控制器操作..?

时间:2014-07-20 09:48:37

标签: sails.js passport.js

我正在尝试在我的sails应用程序中实现用户身份验证..但是我遇到了一个问题,在不同的控制器中他们的动作被调用了两次..我已经从我的浏览器检查过,请求只被发送一次..这是一个例子..

 // api/controllers/AuthController.js
 ...
 logout: function (req, res) {
       console.log("Loggin out");
       req.logOut();
       res.json({message: 'Logged out succesfully'});

  },
...

以下是我的config/routes.js文件。 (为了便于测试api,使用get进行许多操作。)

module.exports.routes = {

  // By default, your root route (aka home page) points to a view
  // located at `views/home/index.ejs`
  // 
  // (This would also work if you had a file at: `/views/home.ejs`)
  '/': {
    view: 'home/index'
  },

  // testing the api
  'get /users/check' : 'UserController.test',
  'get /login' : 'AuthController.process',
  'get /logout' : 'AuthController.logout',
  'get /signup': 'UserController.add',
  'get /verify/username/:username?' : 'UserController.checkUsername',
  'get /verify/email/:email?' : 'UserController.checkEmail',

  // add friend 
  'get /:user?/addfriend': 'FriendController.addFriend',

  // accept request
  'get /:user?/friendrequest/:request?/accept': 'FriendController.acceptRequest',
};

我已对此操作应用了isAuthenticated政策..就像

module.exports = function(req, res, next) {
    if(req.isAuthenticated()) {
        console.log("Valid User");
        return next();
    }
    else {
        console.log("User not logged in");
        return res.json({error: "Please login"});
    }
};

没有,每当我打电话给<myhost>/logout我都会得到以下的json ..

{
  "error": "Please login"
}

,这是服务器上的输出..

Valid User
Loggin out
User not logged in

这意味着我的控制器的动作被调用了两次..这不仅仅是这个控制器的问题。 UserController.add操作具有相同的问题。我似乎做得很好,但我不知道这个问题来自哪里。任何人都可以建议我如何调试它。或者可能是问题的根源。据我检查..

  1. 浏览器未发送两次请求。
  2. Controller的操作被调用两次,中间件与之相关。

1 个答案:

答案 0 :(得分:0)

哦,几周前我也有同样的问题。

Sails还会在静态文件(如styles.css)上调用中间件。 Console.log req-object比您看到浏览器请求的内容。

有两种方法可以解决这个问题:

1。)尝试在路线中设置skipAssets:true(参见:http://beta.sailsjs.org/#/documentation/concepts/Routes/RouteTargetSyntax.html

2.。)在您的政策中添加if条件以跳过资产(例如“ .js”,“ .css”等)。