Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在策略中使用会话变量_Javascript_Node.js_Session Variables_Sails.js - Fatal编程技术网

Javascript 在策略中使用会话变量

Javascript 在策略中使用会话变量,javascript,node.js,session-variables,sails.js,Javascript,Node.js,Session Variables,Sails.js,我知道在控制器之前执行策略,我遇到了一个问题,我的项目在索引中有登录名,我需要验证密码是否正确,如果密码错误,我需要在同一个索引页中显示一条消息说“错误的密码”,我在policies req.session.mensaje和res.locals.mensaje中声明了一个变量,我这样做: 这是我的政策 module.exports = function(req,res,next) { res.locals.mensaje= ''; if(!req.session.mensaje)

我知道在控制器之前执行策略,我遇到了一个问题,我的项目在索引中有登录名,我需要验证密码是否正确,如果密码错误,我需要在同一个索引页中显示一条消息说“错误的密码”,我在policies req.session.mensaje和res.locals.mensaje中声明了一个变量,我这样做:

这是我的政策

module.exports = function(req,res,next) {
    res.locals.mensaje= '';
    if(!req.session.mensaje) return next();
    res.locals.mensaje = _.clone(req.session.mensaje);
    req.session.mensaje='';
    next();
};
这是我的控制器

login: function (req, res, next) {

    var username = req.param('nickname');
    var passw = req.param('password');

    User.findOneByNickname(username).exec(function(err, users) {
        if (err) {
            console.log(err);
            return next(err);
        }

        if (users){
            if(users.password===passw){
                req.session.username=users.username;
                req.session.e_mail=users.e_mail;
                res.view({user: users})
            } else { 
                req.session.mensaje='Clave invalida.';
                return res.redirect('/');
            }
        }
    });
}
配置策略

'*': 'variables'

在索引中,策略尚未执行,我不能在那里使用我的变量typeof say未定义,但当控制器执行且密码正确时,控制器将我带到视图登录,那里我的变量typeof为string请帮助!我的英语很差,希望你能理解我。祝福。

如果我理解正确,您遇到的问题是在显示索引页之前没有运行
变量
策略,因此
mensaje
变量在视图中不可用。解决此问题的最简单方法是使用控制器显示视图,而不是直接路由到视图。因此,在
/config/routes.js
中,而不是:

'/': {view: 'homepage'}
或者不管你有什么,做:

'/': 'HomeController.index'
/api/controllers/HomeController.js
中:

index: function (req, res) {
   res.view('homepage.ejs');
}
更改控制器和视图名称以适合您的项目。关键是,通过使用控制器操作显示视图,可以确保在显示视图之前运行策略