我试图检查我的rethinkdb表中是否存在值。
它就像给出了2个回复一样。
我是这样做的:
router.param('gamename', function(req, res, next, gamename) {
// do validation on gamename here
console.log(gamename);
r.table("Game").filter({
name: gamename,
}).count().eq(1)
.run()
.then(function(response){
if (response) {
console.log('Success ',response);
req.gamename = gamename;
next();
}else{
console.log("Does game exist? : "+response);
res.render('error', { gamename: gamename, message: "Game does not exist" });
}
})
.error(function(err){
console.log('error occurred ',err);
//res.render('error', { });
})
});
出于某种原因,如果我使用表中存在的gamename
,我会从if和else获得两个console.log输出。
NAMETHATEXISTSINTABLE
Success true
Does game exist? : false
如果我使用不存在的值,我会得到两次:
NAMETHATDOESNOTEXIST
Does game exist? : false
Does game exist? : false
为什么它会像这样运行两次?响应总是为假的,另一个是使用我的gamename参数并正确响应true或false。
任何帮助将非常感谢!
答案 0 :(得分:2)
我明白了。
在我的app.js
文件中,我定义了这样的路线:
var admin = require('./routes/admin');
var main = require('./routes/main');
app.use('/admin', admin); // Add admin routes to middleware chain.
app.use('/', main); // Add game routes to middleware chain.
并且在我遇到问题的main.js路由文件中,定义了游戏名称:
/* GET game home page. */
router.get('/:gamename', game_controller.index);
/* GET assets routes page. */
router.get('/:gamename/assets', assets_controller.index);
router.get('/:gamename/assets/:id', assets_controller.id);
因为app.use('/', main);
中的app.js
是在根级/
定义的,所以路由被解析了2次。
将该行更改为:
app.use('/game', main); // Add game routes to middleware chain.
修正了问题。 Hovever,现在我无法在每个游戏中使用domaine.com/gamename - 我需要使用domaine.com/game/:gamename。
如果有人有解决方案,我会很高兴听到它!