res.redirect
は、roll_new_id
関数呼び出しが新しいid値を返す前に発生します。この問題を回避するには、まずroll_new_id
にコールし、新しいIDの作成が完了したらコールするコールバック関数を渡す必要があります。新しいid値が作成されると、新しいid値を引数として渡すコールバック関数を実行します。 roll_new_id
に渡されるコールバック関数の中では、res.redirect
は、コールバック関数の実行時にroll_new_id
から渡された新しいid値を使用して行います。これは理にかなっていますか?
function roll_new_id(callbackFunction){
var new_id;
// create the new id...
// pass new_id to the callback function..
callbackFunction(new_id);
}
app.get('/*', function(req, res) {
check_in_db(req.url, function(result) {
if(result) {
res.sendFile(__dirname + '/index.html');
} else {
roll_new_id(function(theNewId){
// this is the callbackFunction
// called from inside the roll_new_id function
res.redirect('/' + theNewId);
})
}
});
});
また、このようにそれを書くことができます:あなたがこれを行うnext
機能を使用したい場合は
function rollNewIDCallbackFunction(theNewId) {
// this is the callbackFunction
// called from inside the roll_new_id function
res.redirect('/' + theNewId);
}
roll_new_id(rollNewIDCallbackFunction);
:
app.get('/*', function(req, res, next) {
check_in_db(req.url, function(result) {
if(result) {
res.sendFile(__dirname + '/index.html');
} else {
next(); // call middleware to roll new id
}
});
}, function(req, res){ // middleware to roll the new id
function rollNewIDCallbackFunction(theNewId) {
// this is the callbackFunction
// called from inside the roll_new_id function
res.redirect('/' + theNewId);
}
roll_new_id(rollNewIDCallbackFunction);
});
を
リダイレクト後に次回は試してみませんか?非同期の場合は、それもそこに到達するはずです。 –