2016-09-01 27 views
1

Ich folge einem Tutorial, das ejs5 verwendet. Dieses Tutorial möchte, dass ich Express-Flash verwende, und meine routes/users Seite so organisieren.Verwendung von Express-Flash mit Lenker?

router.get('/signup', function(req, res, next){ 
    res.render('accounts/signup', { 
     errors: req.flash('errors') 
    }); 
}); 

Die anschließende ES5 geht so etwas wie so:

<% if (errors.length > 0) { %> 
<%= errors %> 
<% } %> 

Für mich, ich stattdessen Express-Lenker verwenden. Nun, ich weiß, dass meine app.js Datei hat alles, was es braucht, da mein Routing /signup funktioniert wie folgt:

router.get('/signup', function(req, res, next){ 
    res.render('accounts/signup');  
}); 

Allerdings, wenn ich meinen Router Code formatieren, wie im ersten Beispiel gezeigt, bekomme ich einen 404-Fehler auf meine signup Route. Ich verstehe nicht, warum das so ist. Um zu demonstrieren, ist das was ich habe, identisch mit dem ersten Beispiel.

//render the signup// 
router.get('/signup', function(req, res, next){ 
    res.render('accounts/signup', { 
     errors: req.flash('errors') 
    }); 
}); 

Um sicher zu sein, enthält meine Haupt app.js Datei die folgende:

var flash = require('express-flash'); 
app.use(flash()); 

Zusätzlich dazu, ich bin auch nicht sicher, wie das EJS-Skript Lenker zu replizieren. Würde so etwas wie diese Arbeit machen?

Ich kann dies nicht testen, da ich zuerst meine Anmelde-Route anzeigen muss.

+1

Sind Sie mit 'handlebars' oder' Express-handlebars'? –

+0

Entschuldigung. Express-Lenker –

Antwort

1

Sie können einen Flash-Helper registrieren und diesen in der Hauptvorlage verwenden.

// set context for the req, res 
app.use(require('./../web/helpers/view').setContext); 

exphbs.create({ 
    extname  :'hbs', 
    layoutsDir : '/path/', 
    defaultLayout: 'main', 
    helpers  : require('/path/to/view').helpers, // this is where you can register a helper. 
    partialsDir : [ 
     '/path/' 
    ] 
}); 

In view.js, schreiben, ein Verfahren html aus dem Flash-Nachricht aufzubauen.

'use strict'; 

const _ = require('lodash'); 

let _req, _res; 

// build html for flash messages. 
function renderFlashMsg() { 
    let flash = _req.flash(), 
     out = '', 
     types = ['success', 'error', 'info']; 

    _.each(types, (type) => { 
     if (flash[type]) { 
      out += '<div class="flash-msgs '+ type +'">'; 
      out += '<h2><span>' + type + '</span></h2>'; 
      out += '<ul>'; 

      _.each(flash[type], (msg) => { 
       out += `<li>${msg}</li>`; 
      }) ; 

      out += '</ul></div>'; 
     } 
    }); 

    return out; 
} 

module.exports = { 
    'setContext': (req, res, next) => { 
     _req = req; 
     _res = res; 
     next(); 
    }, 
    'helpers': { 
     renderFlashMsg 
    } 
}; 

Jetzt haben Sie können nur renderFlashMsg in Ihrem main Layout-Datei verwenden.

Setzen Sie {{{renderFlashMsg}}}, wo die Flash-Nachrichten in das DOM platziert werden sollen.

1

Sind Sie Setup View Engine für Lenker Vorlage?

app.engine('handlebars', exphbs({/* config */})); 
app.set('view engine', 'handlebars'); 

Oder Änderung Erweiterung der Datei .handlebars