最近、Node.jsとExpress.jsを試し始めました。私は、Mongo Dbからデータを取り込んで、サーバー側の例を使ってフロントエンドでJqueryデータ型を使って表示するマイクロアプリケーションを構築しています。Express Jsで定義した後でもJavascript変数が定義されていない、mongo db
私は必要なデータを取得することができます。しかし、アプリケーションを再起動するたびに、私はレコードの総数を得ることができず、変数は未定義となります。もう一度ページをリロードした後、私はカウントを取得します。どういうわけかjavascriptの新機能私は変数スコープや関数内の変数へのアクセスに関連していくつかの間違いを犯しているようです。だからそれを解決するために、私はエクスプレスjsアプリでコールバックを作成しました。機能のいくつかは機能していて、機能していないものもあります。ここでは、文書でのカウントをフェッチコードです:
//calling the functions here in the express js app
app.get('/tweets/', function(req, res){
var countWithoutFilters;
var countTwitter;
var page = parseInt(req.query.start);
var limit = parseInt(req.query.length);
var skip = page;
var searchQuery = {};
searchQuery = req.query.search.value;
searchQuery = (searchQuery == '' || searchQuery == undefined) ? {}:searchQuery;
var searchId = parseInt(searchQuery);
countNumberOfRowsInTweets(function(data){
countWithoutFilters = data;
});
countNumberOfRowsInTweetsAfterFilters(searchQuery, function(data) {
countTwitter = data;
});
queryTweetsCollection(searchQuery, limit, skip, function(data){
res.send({
draw: req.query.draw,
recordsTotal: countTwitter,
recordsFiltered: countTwitter,
data: data,
page: parseInt(page)
});
});
});
//function to get tweets from the document and count the length
function countNumberOfRowsInTweets(callback)
{
db.collection('tweets').find().toArray(function(err, result){
if(err)
return console.log(err);
callback(result.length);
});
}
//count the items after applying filters
function countNumberOfRowsInTweetsAfterFilters(searchQuery, callback)
{
console.log("Filtered row:"+searchQuery);
var searchId = parseInt(searchQuery);
db.collection('tweets').find({ $or: [{text: new RegExp(searchQuery, 'i')}, {id: searchId}]}).toArray(function(err, result){
if(err)
return console.log(err);
callback(result.length);
});
}
私は、他のアプローチを認識していないですが、私は、変数の巻き上げとクロージャのような概念を通過しようとしました。
可能であれば、正しい解決方法を教えてください。
おかげ
ことを修正する必要があり
を完了するための機会を持って前に、あなたはそれらの変数を使用します*変数*は "undefined"になりますか? –
countTwitterおよびcountWithoutFilters。 –