En el siguiente código, tengo que escribir la descripción 1, 2, 3 y así sucesivamente una y otra vez, ¿hay alguna forma de que pueda ejecutar un bucle for para inicializar todas las variables?

Tengo que pasar estos valores al archivo hbs que lo mostrará en la página web.

app.get('/:id/description', (req, res) => {
  var id = req.params.id;

  console.log(id);

  descriptionModel.findOne({"header":id}).then((DescriptionModel) => {
    if (DescriptionModel === null) {
      res.send('Sorry, the page you have requested does not exsist.');
      return res.status(404).send();
    }

    res.render('index.hbs', {
      image: DescriptionModel.path,
      id: id,
      header: DescriptionModel.header,
      db_head_image_description1: DescriptionModel.header_image.image_description[0],
      db_head_image_heading1: DescriptionModel.header_image.image_heading[0],
      db_head_image_description2: DescriptionModel.header_image.image_description[1],
      db_head_image_heading2: DescriptionModel.header_image.image_heading[1],
      db_head_image_description3: DescriptionModel.header_image.image_description[2],
      db_head_image_heading3: DescriptionModel.header_image.image_heading[2],
      db_head_image_description4: DescriptionModel.header_image.image_description[3],
      db_head_image_heading4: DescriptionModel.header_image.image_heading[3],
      db_head_image_description5: DescriptionModel.header_image.image_description[4],
      db_head_image_heading5: DescriptionModel.header_image.image_heading[4],
      sub_heading: DescriptionModel.sub_heading,
      sub_heading_tagline: DescriptionModel.sub_heading_tagline,
      sub_heading_data: DescriptionModel.sub_heading_data,
      paralax_image_heading: DescriptionModel.paralax_image_heading,
      paralax_image_tagline: DescriptionModel.paralax_image_tagline,
      gallary_heading: DescriptionModel.gallary_heading,
      gallary_tagline: DescriptionModel.gallary_tagline,
    });
    // console.log(DescriptionModel);

  }).catch((e) => {
    res.status(400).send();
  });
});
0
prashantmall1997 14 feb. 2018 a las 12:54

2 respuestas

La mejor respuesta

Puede hacerlo asignando el objeto a una variable y luego haciendo un bucle para obtener cada descripción e imagen, así:

app.get('/:id/description', (req, res) => {
  var id = req.params.id;

  console.log(id);

  descriptionModel.findOne({"header":id}).then((DescriptionModel) => {
    if (DescriptionModel === null) {
      res.send('Sorry, the page you have requested does not exsist.');
      return res.status(404).send();
    }
    const payload = {
      image: DescriptionModel.path,
      id: id,
      header: DescriptionModel.header,
      sub_heading: DescriptionModel.sub_heading,
      sub_heading_tagline: DescriptionModel.sub_heading_tagline,
      sub_heading_data: DescriptionModel.sub_heading_data,
      paralax_image_heading: DescriptionModel.paralax_image_heading,
      paralax_image_tagline: DescriptionModel.paralax_image_tagline,
      gallary_heading: DescriptionModel.gallary_heading,
      gallary_tagline: DescriptionModel.gallary_tagline,
    }
    for (let i = 0; i < 5; i++) {
      payload[`db_head_image_description${i + 1}`] = DescriptionModel.header_image.image_description[i]
      payload[`db_head_image_heading${i + 1}`] = DescriptionModel.header_image.image_heading[i]
    }

    res.render('index.hbs', payload);
    // console.log(DescriptionModel);

  }).catch((e) => {
    res.status(400).send();
  });
});
0
Miguel Calderón 14 feb. 2018 a las 10:18

Sí, para empezar puedes definir el objeto que vas a pasar a res.render fuera de res.render:

var myData = {};
res.render('index.hbs', myData);

También puede agregar pares clave-valor al objeto como parte de la declaración y posteriormente, por ejemplo:

var myData = {
    image: DescriptionModel.path,
    id: id
 };

 myData.header = DescriptionModel.header;

 res.render('index.hbs', myData);

En este punto, su objeto tendría 3 propiedades: image, id y header.

También puede asignar claves dinámicamente y utilizar la concatenación para crear claves personalizadas, p. Ej.

myData['db_head_image_description' + 1] = DescriptionModel.header_image.image_description[0];

Para construir el bucle for, querrá usar tanto claves dinámicas como valores dinámicos. Suponiendo que tiene exactamente 5 elementos y desea usar un bucle for:

for (var i = 0; i < 5, i++) {
  myData['db_head_image_description' + (i+1)] = DescriptionModel.header_image.image_description[0];
  myData['db_head_image_heading' + (i+1)] = DescriptionModel.header_image.image_heading[0];      
}
0
ErisDS 14 feb. 2018 a las 10:18