为什么显示res.login不是函数?

时间:2016-11-19 10:19:41

标签: javascript node.js sails.js

我正在尝试this basic login。注册工作正常,但是当我登录http://localhost:1337/login时(当我在登录表单中输入值并提交时,它会显示以下错误(URL不会更改):

TypeError:res.login不是函数

我试图在网上搜索但找不到任何解决方案。是否存在语法错误或我使用旧技术?

这是必要的代码:

module.exports = {
  login: function (req, res) {
    return res.login({
      email: req.param('email'),
      password: req.param('password'),
      successRedirect: '/',
      invalidRedirect: '/login'
    });
  },
  logout: function (req, res) {
    req.session.me = null;
    if (req.wantsJSON) {
      return res.ok('Logged out successfully!');
    }
    return res.redirect('/');
  },

  signup: function (req, res) {
    User.signup({
      name: req.param('name'),
      email: req.param('email'),
      password: req.param('password')
    }, function(err, user){
      if (err) return res.negotiate(err);
      req.session.me = user.id;
      return res.redirect('/welcome');
    });
  }
};

型号: User.js

module.exports = {

  attributes: {
    email: {
      type: 'email',
      required: true
    },
    password: {
      type: 'string',
      required: true
    }
  },

  signup : function(inputs, cb){
    User.create({
      name: inputs.name,
      email: inputs.email,
      password: inputs.password
    }).exec(cb);
  },

  attemptLogin: function(inputs, cb) {
    User.findOne({
      email: inputs.email,
      password: inputs.password
    }).exec(cb);
  }

};

login.ejs

<h1>Login</h1>
<form action="/login" method="post">

  <label for="email">Your email address?</label>
  <input name="email" type="text"/>
  <br/>

  <label for="password">Your safe word?</label>
  <input name="password" type="password"/>
  <br/>
  <input type="submit"/>
</form>

routes.js

 '/': {
    view: 'homepage'
  },
  'get /login' : {view : 'user/login'},
  'get /signup' : {view : 'user/signup'},
  'get /welcome' : {view: 'user/welcome'},
  'post /login' : 'UserController.login',
  'post /signup' : 'UserController.signup',
  '/logout' : 'UserController.logout'

1 个答案:

答案 0 :(得分:0)

我认为let storyboard = UIStoryboard(name: "Main", bundle: nil) let sw = storyboard.instantiateViewControllerWithIdentifier("SWRevealViewController") as! SWRevealViewController self.window?.rootViewController = sw let cv = storyboard.instantiateViewControllerWithIdentifier("IDOFCONTROLLER") as! NAMEOFCONTROLLER let navigationController = UINavigationController(rootViewController: cv) sw.pushFrontViewController(navigationController, animated: true) 是您在登录操作中使用的功能。我对你的UserController.js文件进行了一些更改,现在它正在为我工​​作。

<强> UserController.js

通过登录操作提供经过身份验证和未经身份验证的视图。使用会话变量来跟踪会话是否已经过身份验证。我在这里使用user.name,你可以使用任何其他属性,如id。

res.login

<强> user.js的 我在User模型中添加了一个属性名称。这是在表单中,但不在模型文件中。

login: function (req, res) {
    if (req.method === 'GET' && !req.session.name) {
        res.view('user/login');
    }
    else if (req.session.name) {
        res.view('user/welcome', { username: req.session.name });
    } else {
        User.findOne({ email: req.param('email'), password: req.param('password')})
            .exec(function (err, user) {
                if (err) res.send(err);
                if (!user) res.send("User Not Found");
                else {
                    req.session.name = user.name;
                    res.view('user/welcome', { username: user.name });
                }
            });
    }
},

<强> routes.js

从同一个Controller / Action提供POST和GET请求。

attributes: {
    name: {
        type: 'string',
        required: true
    },
},

尝试这些线条,你应该能够让它运作起来。如果这有用,请告诉我。