2017-11-08 2 views
0

Ich habe eine Node.js Web-Anwendung mit Express erstellt und versuche, eine Jade-Vorlage nach der Abfrage von MongoDB zu füllen. Ich möchte die Jade-Vorlage mit diesen Werten füllen.Vorfüllen von Pug-Formular aus Express/Node.js Web-App

Etwas, das ich nicht verstehe, ist warum, auch wenn ich alles innerhalb der collection.find() - Funktion auskommentiere und nur eine res.render ('editresource') habe - die Ansicht wird nicht gerendert. Versteh ich etwas fundamentales nicht?

// From pug file (editresource.pug) 
extends layout 

block content 
    h1 = title 

    .main.container 
     .row 
      .col-md-6.col-md-offset-3 
       h1.display-4.m-b-2 Edit Resource 

       // register form 
       form(method='POST' action='/edit/editresource') 
        div.form-group 
         label(for='name') Name: 
         input#name.form-control(type='text', name='name', required='', value=locals.dName) 

// From Node.js/Express: 
    router.get('/editresource/:id', function(req, res) { 
    var db = req.db; 
    var resource_collection = db.get('resources'); 

    var resourceId = req.params.id; 

    resource_collection.find({'_id' : resourceId},{},function(e,docs){ 
     // res.render('editresource', { 
     // name : 'asdf' 
     // }); 

     //res.locals.dName = docs[0].name; 
     //res.render('editresource') 

     res.render('editresource', { 'viewpost' : docs[0].name }) 

     //res.name = docs[0].name; 
     //res.render('editresource', { name : docs[0].name }); 
    }); 
// attempting to call res.render('editresource') here does not work?? 
}); 

// All of this is fired by this function when a link is clicked 
function editResource(event) { 
    $.ajax({ 
     type: 'GET', 
     url: '/edit/editresource/' + $(this).attr('rel') 
    }).done(function(response) { 

     if (response.msg === '') { 
     } 
     else 
      alert('Error: ' + response.msg); 
    }); 
}; 

fand ich a similar question aber res.locals mit nicht funktioniert, noch das gesamte Objekt nicht senden.

+0

Ist 'docs [0] .name' wert string?, wenn ja, benutze einfach den' viewpost' für value: 'value = viewpost' in ** Jade ** – agit

+0

Ah, ja. Ich habe den Beitrag für diese Änderung bearbeitet :) Leider funktioniert das immer noch nicht - obwohl meine View Engine momentan Mops ist. – huangtt

+0

gibt es irgendeine Fehlermeldung beim Rendern der Mops-Datei? – agit

Antwort

0

gelöst! Die Parameter wurden korrekt gesendet, aber ich habe den HTML-Code nicht injiziert, als die Antwort auf der Clientseite empfangen wurde. (zB $ ('# wrapper'). html (antwort);)

0

Um die an pug gesendete Variable zu verwenden, müssen Sie den Variablennamen richtig verwenden.

div.form-group 
    label(for='name') Name: 
    input#name.form-control(type='text', name='name', required='', value=viewpost 
+0

Whoops, leichter Tippfehler - danke! Leider füllt dies das Formular noch nicht richtig aus. – huangtt

+0

Haben Sie den Code auch richtig eingerückt? Es ist nicht richtig eingerückt! –

+0

Es ist! Ich habe gerade einen Ausschnitt aus der ganzen Datei gemacht :) Nur meine Post bearbeitet - bemerkt, dass sogar versuchen, die Ansicht zu rendern funktioniert nicht – huangtt

0

Erstellen Sie ein Objekt zum Senden render() Methode.

var renderData = { 
    dName = docs[0].name 
}; 

res.render('editresource', renderData) 

und varaible Namen für Wert ändern Attribut des Eingangs dName

input#name.form-control(type='text', name='name', required='', value=dName) 
Verwandte Themen