Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/07/2013, 10:58
Avatar de JaimeMSE
JaimeMSE
 
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 14 años
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