MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Express/Node.js-Fehler:Referenzfehler:Res ist nicht definiert

  1. Sie können app.render auf Root-Ebene und res.render nur innerhalb einer Route/Middleware aufrufen.
  2. app.render gibt immer das html in der Callback-Funktion zurück, während res.render tut dies nur, wenn Sie die Callback-Funktion als dritten Parameter angegeben haben. Wenn Sie res.render aufrufen ohne den dritten Parameter/Callback-Funktion wird das gerenderte HTML mit einem Statuscode von 200 an den Client gesendet.

Sehen Sie sich die folgenden Beispiele an.

app.render

app.render('index', {title: 'res vs app render'}, function(err, html) {
    console.log(html)
});

res.render ohne dritten Parameter

app.get('/render', function(req, res) {
    res.render('index', {title: 'res vs app render'})
})

res.render mit drittem Parameter

app.get('/render', function(req, res) {
    res.render('index', {title: 'res vs app render'}, function(err, html) {
        console.log(html);
        res.send('done');
    })
})
  1. res.render verwendet app.render intern zum Rendern von Vorlagendateien.
  2. can't set headers bedeutet, dass Sie nicht in den Körper gelangen können.
  3. res.render() Die Funktion kompiliert Ihr Template (bitte verwenden Sie keine ejs), fügt dort Locals ein und erstellt aus diesen beiden Dingen eine HTML-Ausgabe.

// Hier stellen Sie ein, dass sich alle Templates in /views befinden Verzeichnis

app.set('views', __dirname + '/views');

// here you set that you're using `ejs` template engine, and the
// default extension is `ejs`
app.set('view engine', 'ejs');

// here you render `local` template
response.render("local", {local: local_json});

Der Vorlagenpfad ist also views/ (erster Teil) + local (zweiter Teil) + .ejs (dritter Teil) ===views/local.ejs