2017-10-08 2 views
0

Ich versuche zu überprüfen, ob ein Wert in meiner rethinkdb Tabelle existiert.rethinkdb Antwort ist sowohl wahr als auch falsch

Es scheint, als ob es 2 Antworten gibt.

Ich mache es so:

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', { }); 

    }) 

}); 

Aus irgendeinem Grund, wenn ich einen gamename verwenden, die in der Tabelle vorhanden ist, ich beide console.log Ausgänge zur Verfügung, sowohl wenn und anderes.

NAMETHATEXISTSINTABLE 
Success true 
Does game exist? : false 

Wenn ich einen Wert verwenden, ich existiert nicht gleich zweimal:

NAMETHATDOESNOTEXIST 
Does game exist? : false 
Does game exist? : false 

Warum es Naht wird wie folgt zweimal ausgeführt wird? Eine, bei der die Antwort immer falsch ist, und die andere, bei der sie meinen Parameternamen verwendet und korrekt oder falsch antwortet.

Jede Hilfe wird sehr geschätzt!

Antwort

2

Ich fand es heraus.

In meiner app.js Datei definiert ich meine Routen wie folgt aus:

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. 

und in den main.js Routen-Datei, wo ich das Problem hatte, wurde gamename definiert:

/* 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); 

So, da die app.use('/', main); in app.js wurde auf Root-Ebene / die Routen definiert, wo 2 mal aufgelöst wurde.

Ändern Sie diese Zeile an:

app.use('/game', main); // Add game routes to middleware chain. 

das Problem behoben. Hovever, jetzt kann ich für jedes Spiel, das ich will, nicht mehr domaine.com/gamename verwenden - ich brauche domaine.com/game/:gamename.

Wenn jemand eine Lösung dafür hat, werde ich mich freuen, davon zu hören!

Verwandte Themen