2013-12-19 4 views
2

Я пытаюсь проверить значения в контроллере и отправить сообщение об ошибке в файл представления EJS в Sailsjs Framework.sails flash validation not working

Я получаю следующее сообщение об ошибке:

 

if(flash && flash.err) { 
>> flash is not defined in ejs file. 

я добавил флэш политика в конфигурации/policies.js

 '*': 'flash',

И это, как я перенаправление мнения об ошибке. .

var usernamePasswordRequiredError = [{ 
         name: 'usernamePasswordRequired', 
         message: 'You must enter both a username and password.' 
        }] 

        req.session.flash = { 
         err: usernamePasswordRequiredError 
        } 

        res.redirect("/user/loginpage"); 
        return;

содержание Flash.js

 

Policy File: 
    module.exports = function(req, res, next) { 
    res.locals.flash = {}; 
    if(!req.session.flash) return next(); 
    res.locals.flash = _.clone(req.session.flash); 
    req.session.flash = {}; 
    next(); 
}; 

Помощь мне решить эту проблему вспышки не определена ошибка в просмотр файлов.

+0

Вот скринкаст по внедрению флеш-сообщения в парусах http://irlnathan.github.io/sailscasts/blog/2013/08/27/building-a-sails-application-ep4-handling-validation-errors-with -a-flash-message/ – JohnGalt

ответ

0

Ваш код выглядит довольно близко к сути, которую я видел, и мне нравится этот подход немного больше, чем ваш. Это похоже на дух, но настройка политики ошибок и уведомлений происходит в политике.

https://gist.github.com/BenBarber/5700061

3

Sails.js имеет connect-flash запеченный в, поэтому я использую это:

На сервере, чтобы установить:

req.flash('info', 'OHai'); 

На клиенте, для получения:

res.req.flash('info'); 

Это означает, что мне не нужно возиться с _.clone() или этим большим gist, и если вы выполняете несколько вызовов req.flash('info', '...');, вы получаете массив всех значений, когда вы извлекаете его на стороне клиента. Конечно, вы можете использовать любую метку (а не только «информацию»), которую вы тоже хотите.

Сообщите мне, если вам нужно больше деталей.

+0

У вас есть дополнительная информация? спасибо – Suisse

1

С flash политики предлагается в irlnathan's screencast, объект res.locals.flash должен быть определен, по меньшей мере, равна {}, следовательно Экспресс не должны бросить ошибку вы получили.

Но политика распространяется только на контроллеры , а не на простые виды.

Вы уверены, что паруса обслуживают вид ejs с контроллера, а не с основного файла конфигурации config/routes.js?