Estoy haciendo un videoCurso de node.js en youtube (personalmente me parece muy bueno... es más, me parece tan bueno que voy a poner el enlace, si esto no se puede hacer, lo quitáis o me avisáis y yo mismo lo eliminaré... por otra parte, quizá muchos lo conozcáis y tampoco sea un gran descubrimiento... pero bueno, ahí va el enlace: https://www.youtube.com/playlist?list=PL38CA7BD8CB5F3FF9).
Estoy siguiendo bastante al pie de la letra el curso, aunque hay cosas que no he podido hacerlas tal cual... por ejemplo, el tutor instala el framework express, y yo además del framework express, también necesité instalar el framwork express-generator. Este cambio genera un pequeño efecto dominó, y a raíz de él, necesito realizar algunas modificaciones... por ejemplo:
1) El objeto http no está por defecto en app.js, y lo tengo que hacer yo... aprovecho y lo pongo fuera, en otro archivo (server.js)
2) Para hacer routing no lo hago en el archivo app.js y utilizando el objeto app=express(); como en el curso se muestra: app.get("/ruta",function(){}); sino que lo hago en el archivo routes/index.js y utilizo un objeto Router. O sea, que lo hago así:
var router = express.Router();
router.get("/ruta", function(){});
Todo va bien... cuando utilizo los método get y post funciona correctamten, pero el problema es que, en un momento del curso utilizan los métodos put y delete, y no hay manera de hacerlo funcionar... llevo TODO el día con ello.
En el curso lo hacen así:
- Por un lado el html, renderizado utilizando jade:
Código jade:
Ver original
h1 Vista Editar tarea form(method='post', action='/tareas/' + tarea.id) input(name='_method', value='PUT', type='hidden') fieldset legend Editra tarea div.clearfix label Tarea div.input input(name='tarea[tarea]', class='xlarge', value="#{tarea.tarea}") div.actions input(type='submit', value='Guardar', class='btn primary') button(type='reset', class='btn') Cancelar
- Por otro lado el rutting para la ocasión:
Código Javascript:
Ver original
var app= express(); app.put('/tareas/:id', function(req, res){ Tarea.findById(req.params.id, function (err, doc){ doc.tarea = req.body.tarea.tarea; doc.save(function(err) { if (!err){ res.redirect('/tareas'); } else { // error handling } }); }); });
En mi caso, aunque el jade no sea exactamente igual... no lo voy a poner, porque es muy parecido y sé (con un 99% de certeza) que está bien. Así que pondré sólo el código del servidor:
Código Javascript:
Ver original
var router = express.Router(); router.put('/tareas/:id', function(req, res) { Tarea.findById(req.params.id, function(err, doc) { doc.tarea = req.body.tarea.tarea; doc.save(function(err) { if(!err) res.redirect('/tareas/'); else res.redirect('/tareas/nueva'); }); }); });
Además... en el curso se utiliza, casi de igual manera, el método app.del("ruta", function(){}); pero si yo hago router.del("ruta", function(){}); no arranca el servidor y me dice que ese método no está definido...
¿Alguna idea? ¿Alguna solución? ¿Algún porqué de todo esto?
Gracias y un saludo.