简体   繁体   中英

Passing parameters to route file

I need to find the events of a user but I can't retrieve the user since I can't pass the user id to route file of events.

app.js :

var Router = express.Router();

Router.use("/users/:uid/events", events);

events.js :

Router.post("/",function (req,res) {
User.findOne({
    _id:req.params.uid
},function (err, foundUser) {
    if(err){
        res.json({success:false, message:"The user couldn't be found"});
    }else{
        console.log(req.params.uid);
        console.log(foundUser);
        var event = new Event();
        event.title = req.body.title;
        event.description = req.body.description;

        event.save(function (err) {
            if(err){
                console.log(err);
            }
        });

        foundUser.events.push(event);
    }
})
});

As a result :

uid = undefined
foundUser = null

How can i pass uid parameter to the events.js?

I think this should work.
app.js:

var Router = express.Router();

Router.use("/users/", events);

events.js:

Router.post("/:uid/events", function (req,res) {
  User.findOne({
    _id:req.params.uid
  },function (err, foundUser) {
    if(err){
      res.json({success:false, message:"The user couldn't be found"});
    }else{
      console.log(req.params.uid);
      console.log(foundUser);
      var event = new Event();
      event.title = req.body.title;
      event.description = req.body.description;

      event.save(function (err) {
        if(err){
          console.log(err);
        }
      });

      foundUser.events.push(event);
    }
  });
});

While Lazyexpert's answer is a way to solve this problem, I found what I have been exactly looking for today.

In order to pass uid from app.js

Router.use("/users/:uid/events", events);  

to another route make sure that your router contains {mergeParams:true}

var express = require('express');
var Router = express.Router({mergeParams:true});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM