После нескольких мучительных недель попыток найти суть моей проблемы, я нашел ее. Я хочу знать, что является причиной такого поведения. Я построил 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просто хотел бы знать, почему я не могу сначала ввести параметр (даже если он не влияет на саму функцию, только на другой). Благодаря.