Почему router.get ('/: x', ..) заставляет другую функцию возвращать ноль, в то время как router.get ('/ foo /: x', ...) абсолютно в порядке? - PullRequest
0 голосов
/ 22 октября 2019

После нескольких мучительных недель попыток найти суть моей проблемы, я нашел ее. Я хочу знать, что является причиной такого поведения. Я построил API для своего сервера mongodb, как я учился в школе, используя Model, Controller, Routes.

В моемobbyRoutes.js оказывается, что если я напишу router.get('/:lobbyID',controller.get); Другая функция: router.get('/getAvailable',controller.getAvailable) - вернет ноль, когда я наберу URL (... / api / lobbies / getAvailable - просто возвращаетслово нуль вместо json).

Между тем, если я сделаю это небольшое изменение: router.get('/get/:lobbyID',controller.get); (добавьте 'get /' before ':obbyID') решит проблему, а getAvailable возвращает json, как ожидалось, и больше не является нулевым.

obbyRoutes.js:

var controller = require('./LobbyController');
router.post('/insert',controller.insert);
router.get('/getall',controller.getall);
router.get('/get/:lobbyID',controller.get); //the one that affects
router.post('/update',controller.update);
router.post('/delete',controller.delete);
router.get('/getAvailable',controller.getAvailable); // the one that is affected
router.post('/connect',controller.connect);
router.post('/disconnect',controller.disconnect);
router.get('/getable',controller.getable);

module.exports = router;

и, если это помогает, лоббированный контроллер.js:


exports.get =  function(req, res,next){
    CurrentLobby.findOne({_id:req.params.lobbyID}).then(function(data){
        res.json(data);
    },function(err){
        next(err);
    });
};


exports.getall = function(req, res, next){

    CurrentLobby.find( {} ).then(function(data){
        res.json(data)

    },
    function(err){
        next(err);
    }
    );

};

exports.getable = function(req,res,next){
    CurrentLobby.findOne({isAvailable:true}).then(function(data){
        res.json(data)
    },
    function(err)
    {
        next(err);
    });
};

exports.insert = function(req, res, next){
    var isAvailable = true;
    var playerCount = 0;
    var playerArray = [];
    var PINCODE = -1;
    var gameMode = "";
    var currentWord = "";

    var query = {title:"Index"};
    CurrentLobby.findOne({_id:"5d7a9060004a5c3318d0db98"
    }).then(function(data){
        console.log(data);
        var lobby = {title:"Lobby_"+(data.playerCount+1).toString(), isAvailable:isAvailable,playerCount:playerCount,playerArray:playerArray,PINCODE:PINCODE,gameMode:gameMode,currentWord:currentWord};
        var newItem = new CurrentLobby(lobby);
            newItem.save(function(err, item){
                if(err){
                    next(err);
                }
                res.json(item);
            });//end of save   
        CurrentLobby.findOne(query).then(function(data){
        data.playerCount++;
        data.save(function(err,item)
        {
            if(err) {next(err)};
            console.log("index incremented");
        });

        },
        function(err)
        {
            next(err);
        });
      },function(err)
      {
          next(err);
      });
    };

exports.delete =  function(req, res, next){

        CurrentPost.remove({_id:req.body._id}).then(function(){
                res.send("deleted " + req.body._id);
        }, function(err){
            next(err);
        }
        );

} ;   

exports.update = function(req, res, next){
    CurrentLobby.findOne({_id:req.query.lobbyID}).then(function(data){
        data.isAvailable = (typeof req.body.isAvailable == 'undefined') ? data.isAvailable : req.body.isAvailable;
        data.playerCount = (typeof req.body.playerCount=='undefined') ? data.playerCount : req.body.playerCount;
        data.playerArray = (typeof req.body.playerArray=='undefined') ? data.playerArray : req.body.playerArray;
        data.PINCODE = (typeof req.body.PINCODE=='undefined') ? data.PINCODE : req.body.PINCODE;
        data.gameMode = (typeof req.body.gameMode=='undefined') ? data.gameMode : req.body.gameMode;
        data.currentWord = (typeof req.body.currentWord=='undefined') ? data.currentWord : req.body.currentWord;
        data.save(function(err, item){
            if(err){
                next(err);
            }
            res.json(item);
        });

    },function(err){
        next(err);
    });
};

    exports.getAvailable=function(req,res,next)
    {
        var query = {isAvailable:true};
        CurrentLobby.findOne(query).then(function(data){
            res.json(data);
        },
        function(err){
            next(err);
        }
        );
    };

    exports.connect=function(req,res,next)
    {
        var query={_id:req.query.lobbyID}
        CurrentLobby.findOne(query).then(function(data)
        {
            console.log("called connect, user:"+req.query.userID+", lobby:"+req.query.lobbyID);
            data.isAvailable=false;
            if (typeof data.playerArr !== 'undefined' && data.playerArr.length >= 0) {
                // the array is defined and has at least one element
                data.playerArr.push(req.query.userID);
                console.log("successfully added user");
                data.playerCount++;
                if(data.playerCount==8)
                    data.isAvailable=false;
            }
            else{
                data.playerArr.push(req.query.userID);
                console.log("1st user");
            }
            data.save(function(err, item){
                if(err){
                    next(err);
                }
                res.json(item);
            });
        },
        function(err)
        {
            next(err);
        });
    };

    exports.disconnect=function(req,res,next)
    {
        var query={_id:req.query.lobbyID}   
        CurrentLobby.findOne(query).then(function(data)
        {
            console.log("called disconnect, user:"+req.query.userID+", lobby:"+req.query.lobbyID);
            data.isAvailable=false;
            if (typeof data.playerArr !== 'undefined' && data.playerArr.length >= 0) {
                // the array is defined and has at least one element
                var index = data.playerArr.indexOf(req.query.userID);
                if (index !== -1){ data.playerArr.splice(index, 1);
                console.log("successfully removed user");
                data.playerCount--;
                //room available
                if(data.playerCount==0)
                {
                    data.PINCODE=-1;
                    data.gameMode="";
                    data.currentWord="";
                    data.isAvailable=true;
                }
                }
                else{
                    console.log("not found");
                }
            }
            else console.log("array is empty");
            data.save(function(err, item){
                if(err){
                    next(err);
                }
                res.json(item);
            });
        },
        function(err)
        {
            next(err);
        });
    };

Iпросто хотел бы знать, почему я не могу сначала ввести параметр (даже если он не влияет на саму функцию, только на другой). Благодаря.

1 Ответ

0 голосов
/ 22 октября 2019

Как сказал пользователь «Mike Pomax Kamermans», использование параметра first по порядку нарушит все остальные маршруты, поэтому слово getAvailable будет распознаваться как параметр hallID, а не вызывать функцию getAvailable. довольно смущенный, я не мог понять это один ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...