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
var db = require('../db'); var Articulo = function(){}; Articulo.obtener_todos = function() { db.query("SELECT * FROM articulos WHERE estado > 0", function(error, articulos){ if(error) { throw error; } console.log(articulos); }); }; module.exports = Articulo;
Y luego tengo el controlador:
Código Javascript:
Ver original
var Articulo = require('../../models/articulo'); exports.lista = function(req, res){ var lista = Articulo.obtener_todos(); res.render('../views/admin/articulos/lista', {articulos:lista}); };
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
var Articulo = require('../../models/articulo'); exports.lista = function(req, res){ var articulos = Articulo.obtener_todos(res); res.render('../views/admin/articulos/lista', {articulos:articulos}); };
Y en el modelo:
Código Javascript:
Ver original
var db = require('../db'); var Articulo = function(){}; Articulo.obtener_todos = function(res) { db.query("SELECT * FROM articulos WHERE estado > 0", function(error, articulos){ if(error) { throw error; } else { res.json(articulos); } }); }; 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!