Foros del Web » Programando para Internet » Node.js »

Problema al pasarale los datos del modelo al controlador MVC

Estas en el tema de Problema al pasarale los datos del modelo al controlador MVC en el foro de Node.js en Foros del Web. Hola, Aquí otra duda que sigo sin poder resolver. He buscado mucho por internet, pero todos usan el ejemplo de tener la consulta en el ...
  #1 (permalink)  
Antiguo 23/07/2013, 10:58
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Problema al pasarale los datos del modelo al controlador MVC

Hola,

Aquí otra duda que sigo sin poder resolver.
He buscado mucho por internet, pero todos usan el ejemplo de tener la consulta en el archivo app o simplemente no usan MVC.

Tengo el modelo articulo.js (cuando uso el console.log me los muestra perfectamente):

Código Javascript:
Ver original
  1. var db = require('../db');
  2.  
  3. var Articulo = function(){};
  4.  
  5. Articulo.obtener_todos = function() {
  6.     db.query("SELECT * FROM articulos WHERE estado > 0", function(error, articulos){
  7.         if(error)
  8.         {
  9.             throw error;
  10.         }
  11.         console.log(articulos);
  12.     });
  13. };
  14.  
  15. module.exports = Articulo;

Y luego tengo el controlador:

Código Javascript:
Ver original
  1. var Articulo = require('../../models/articulo');
  2.  
  3. exports.lista = function(req, res){
  4.     var lista = Articulo.obtener_todos();
  5.     res.render('../views/admin/articulos/lista', {articulos:lista});
  6. };

Y en el archivo lista.js tengo un each articulo in articulos.

El problema viene que no sé como 'retornar' la variable articulos, que es la que tiene todos los artículos (en el modelo) al controlador para así pasarselos a la vista.

Espero que me podáis ayudar.
Gracias!

________________________________________

Actualizo

He probado a poner en el controlador:

Código Javascript:
Ver original
  1. var Articulo = require('../../models/articulo');
  2.  
  3. exports.lista = function(req, res){
  4.     var articulos = Articulo.obtener_todos(res);
  5.     res.render('../views/admin/articulos/lista', {articulos:articulos});
  6. };

Y en el modelo:

Código Javascript:
Ver original
  1. var db = require('../db');
  2.  
  3. var Articulo = function(){};
  4.  
  5. Articulo.obtener_todos = function(res) {
  6.     db.query("SELECT * FROM articulos WHERE estado > 0", function(error, articulos){
  7.         if(error)
  8.         {
  9.             throw error;
  10.         }
  11.         else
  12.         {
  13.             res.json(articulos);
  14.         }
  15.     });
  16. };
  17.  
  18. module.exports = Articulo;

Me muestra los artículos en formato JSON pero sin haber renderizado la plantilla y me aparece el error:

http.js:707
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:707:11)
at ServerResponse.res.setHeader (/Users/jaimemse/Bitbucket/protecms/node_modules/express/node_modules/connect/lib/patch.js:59:22)
at /Users/jaimemse/Bitbucket/protecms/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js:63:17
at fs.js:266:14
at Object.oncomplete (fs.js:107:15)

Supongo que será que no puedo usar más de un response en la misma consulta. Es la única forma que se me ha ocurrido. En PHP simplemente haces un return en una función y al invocarla obtienes lo datos del return, pero en javascript veo que no. ¿Alguien me puede ayudar? Sigo atascado y probando, pero necesito solucionarlo lo antes posible.

Gracias de nuevo!
__________________
@JaimeMSE - ¡Sígueme!

Última edición por JaimeMSE; 23/07/2013 a las 22:02
  #2 (permalink)  
Antiguo 29/07/2013, 12:46
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema al pasarale los datos del modelo al controlador MVC

Estas pasando al modelo el response (pq?) y le envias json, no te va a ejecutar el res.render del controlador, en el modelo deberías hacer un return de ese json y luego el render en el controlador?

Última edición por carlituxman; 30/07/2013 a las 01:29 Razón: explicación mejor
  #3 (permalink)  
Antiguo 30/07/2013, 11:19
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Problema al pasarale los datos del modelo al controlador MVC

Hola,

Eso era una prueba, lo que.quiero es implementar el patron mvc a nodejs pero no soy capaz de hacerlo.

Eso de dos responses era una prueba.
__________________
@JaimeMSE - ¡Sígueme!

Etiquetas: controlador, modelo, mvc
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:45.