undefined id in my middleware

0

Edit: what the middleware does takes the url part of the id and uses it to search the database for a special record but tells me that the id in the find_image.js is undefined so I guess it does not is passing the parameters to the middleware.

this is my code: router_app.js

var express = require('express');
var Imagen = require('./models/imagen');

var router = express.Router();

var image_finder_middleware = require("./middlewares/find_image");

router.get("/", function(req, res){
res.render("app/home");
});

/* Rest */

router.get("/imagenes/new", function(req, res){
res.render("app/imagenes/new");
});

router.all("/imagenes/:id*", image_finder_middleware);

router.get("/imagenes/:id/edit", function(req, res){
res.render("app/imagenes/edit");
});

router.route("/imagenes/:id")
.get(function(req,res){
    res.render("app/imagenes/show");
})
.put(function(req,res){
    res.locals.imagen.title = req.body.title;
    res.locals.imagen.save(function(err) {
            if (!err) {
                res.render("app/imagenes/show");
            } else{
                res.render("app/imagenes/"+req.params.id+"/edit");
            }
        })
})
.delete(function(req,res){
    Imagen.findOneAndRemove({_id: req.params.id},function(err){
        if (!err) {
            res.redirect('/app/imagenes');
        } else{
            console.log(err);
            res.redirect('/app/imagenes'+req.params.id);
        }
    })
})


router.route("/imagenes")
.get(function(req,res){
    Imagen.find({},function(err,imagenes) {
        res.render("app/imagenes/index", {imagenes:imagenes});
    })
})
.post(function(req,res){
    var data = {
        title: req.body.title
    }

    var imagen = new Imagen(data);

    imagen.save(function(err) {
        if (!err) {
            res.redirect("/app/imagenes/"+imagen._id);
        }else{
            res.render(err);
        }
    })
})


module.exports = router;

this is my find_image.js

var Imagen = require("../models/imagen");

module.exports = function(res, req, next) {
Imagen.findById(req.params.id, function(err, imagen){
    if (imagen != null) {
        console.log("encontre la imagen"+imagen.title);
        res.locals.imagen = imagen;
        next();
    } else{
        res.redirect("/app");
    };
})
}
    
asked by Emanuel Mamani 18.07.2016 в 20:21
source

1 answer

0

In the part where you use the middleware you have the following

router.all("/imagenes/:id*", image_finder_middleware);

If you look closely at the url you have /imagenes/:id* which is a mistake, instead you should have something like

router.all("/imagenes/:id", image_finder_middleware);
// o
router.all("/imagenes/:id(expresion regular)", image_finder_middleware);

or if you want to run urls as /imagenes/1/url1 and /imagenes/1/url2 you should write

router.all("/imagenes/:id/*", image_finder_middleware);
    
answered by 18.07.2016 в 23:07