2017-05-31 1 views
0

Ich habe ein Problem, das ich seit einiger Zeit herausfinden wollte, und hoffte, dass jemand in der Lage sein könnte, mir in die richtige Richtung zu zeigen.Express-Validator; Fehlervariable nicht definiert in EJS

Meine Variable (Fehler), die ich im Objekt res.render {} übergeben habe, ist in meiner Layoutdatei nicht verwendbar. Das Problem ist die Protokollierung als Referenzfehler.

Wenn ich den ejs-Code herausnehmen, meldet sich mein Fehler ordnungsgemäß an das Terminal; Ich kann es nur nicht in meiner Layoutdatei verwenden.

Folgendes ist der Code von layout.ejs, zum Teil.

<% for(var i = 0; i < errors.length - 1; i++){ %> 
    <li> <%= errors[i] %> </li> 
<% } %> 

und POST ...

//POST route 
app.post('/articles/add', function(req, res){ 

    req.assert('title', 'Enter title').notEmpty(); 
    req.assert('author', 'Enter author').notEmpty(); 
    req.assert('body', 'Enter an article').notEmpty(); 

    //get errors 
    req.getValidationResult().then(function(err){ 


    if(err.isEmpty()){ 
     console.log(err); 
     res.render('add_article',{ 
     title: 'Add Article', 
     errors: err // <- 
     }); 
    } 

    else { 

     let article = new Article(); 
     article.title = req.body.title; 
     article.author = req.body.author; 
     article.body = req.body.body; 
     article.save(function(e){ 
     if(e) {console.log(e)} 
     else{ 
      req.flash('success', 'Article Added'); 
      res.redirect('/'); 

     } 
     }); 
    } 

    }); 

Vielen Dank für jede Hilfe.

Antwort

0

Wie ich sehe, gibt es zwei Bugs in Ihrem Code. Zuerst die if(err.isEmpty()), wenn err leer ist, dann versuchst du zu senden !! Und ein anderer ist die Verwendung von req.getValidationResult(), es wird mit Ergebnis object kein array aufgelöst werden. Unten ist der Code, der helfen könnte.

//POST route 
app.post('/articles/add', function(req, res){ 

    req.assert('title', 'Enter title').notEmpty(); 
    req.assert('author', 'Enter author').notEmpty(); 
    req.assert('body', 'Enter an article').notEmpty(); 

    //get errors 
    req.getValidationResult().then(function(result){ 


    if(!err.isEmpty()){ 
     console.log(err); 
     res.render('add_article',{ 
     title: 'Add Article', 
     errors: result.array() // <- 
     }); 
    } 

    else { 

     let article = new Article(); 
     article.title = req.body.title; 
     article.author = req.body.author; 
     article.body = req.body.body; 
     article.save(function(e){ 
     if(e) {console.log(e)} 
     else{ 
      req.flash('success', 'Article Added'); 
      res.redirect('/'); 

     } 
    }); 
    } 

}); 

Und die result.array() wird in etwa so produzieren:

[ 
    {param: "email", msg: "required", value: "<received input>"}, 
    {param: "email", msg: "valid email required", value: "<received input>"}, 
    {param: "password", msg: "6 to 20 characters required", value: "<received input>"} 
] 
Verwandte Themen