rethinkdb响应既是真的又是假的

时间:2017-10-08 15:51:36

标签: node.js express rethinkdb rethinkdb-javascript

我试图检查我的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。

任何帮助将非常感谢!

1 个答案:

答案 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。

如果有人有解决方案,我会很高兴听到它!