sql >> Base de Datos >  >> NoSQL >> MongoDB

Error de Express/Node.js:Error de referencia:Res no está definido

  1. Puede llamar a app.render en el nivel raíz y res.render solo dentro de una ruta/middleware.
  2. app.render siempre devuelve el html en la función de devolución de llamada, mientras que res.render lo hace solo cuando ha especificado la función de devolución de llamada como su tercer parámetro. Si llama a res.render sin el tercer parámetro/función de devolución de llamada, el html renderizado se envía al cliente con un código de estado de 200.

Echa un vistazo a los siguientes ejemplos.

app.render

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

res.render sin tercer parámetro

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

res.render con tercer parámetro

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 usa app.render internamente para renderizar archivos de plantilla.
  2. can't set headers significa que no puedes entrar en el cuerpo.
  3. res.render() La función compila su plantilla (no use ejs), inserta locales allí y crea una salida html a partir de esas dos cosas.

// aquí establece que todas las plantillas se encuentran en /views directorio

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});

Entonces, la ruta de la plantilla es views/ (primera parte) + local (segunda parte) + .ejs (tercera parte) ===views/local.ejs