Hola buenos días a todos.
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 originalh1 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 originalvar 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 originalvar 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.