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();
});
});
2 respuestas
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();
});
});
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];
}
Preguntas relacionadas
Nuevas preguntas
node.js
Node.js es un tiempo de ejecución de E / S asíncrono, sin bloqueo y basado en eventos que utiliza el motor JavaScript V8 de Google y la biblioteca libuv. Se utiliza para desarrollar aplicaciones que hacen un uso intensivo de la capacidad de ejecutar JavaScript tanto en el cliente como en el lado del servidor y, por lo tanto, se benefician de la reutilización del código y la falta de cambio de contexto.