2
我是NodeJS的新手,但是經驗豐富的程序員。我正在開展一個側面項目,讓我的腳與節點保持一致。我正在查看MongoDB的存儲。要開始我只想測試在節點中創建一些基本的CRUD函數。我在下面列出了我的代碼。nodejs使用globals
我的問題是關於全局var'updated'。它用於「讀取」和「更新」功能來控制接下來調用哪個函數。我想按照以下順序調用它們:創建,讀取,更新,讀取,刪除。
這是我的理解是,我不能傳入一個函數參數來'讀'來決定下一個要調用的函數,因爲這是異步調用的,我定義的lambda函數作爲我的回調mongojs.read將不會父函數參數使用。
這樣做的正確方法是什麼?使用全局感覺就像是黑客。 :)
// app.js
//<user>:<password>@<server>/<database>
var connection = "foo:[email protected]/blah";
var collections = ["scores"]
var db = require("mongojs").connect(connection, collections);
//console.log(db);
var updated = false;
function my_create()
{
console.log("my_create");
db.leaderboard.save({name: "sunder", score: 42}, function(err, result) {
if(err || !result)
{
console.log("Score save failed");
console.log(err);
}
else
{
console.log("Score save successful");
my_read();
}
});
}
function my_read()
{
console.log("my_read");
// app.js
db.leaderboard.find({name: "sunder"}, function(err, results) {
if(err || !results)
{
console.log("Score read failed");
console.log(err);
}
else
{
results.forEach(function(score)
{
console.log(score);
});
// I am sure using globals is a HACK. Need to figure this out.
if(updated)
my_delete();
else
my_update();
}
});
}
function my_update()
{
console.log("my_update");
db.leaderboard.update({name: "sunder"}, {$set: {score: 1337}}, function(err, result) {
if(err || !result)
{
console.log("Score update failed");
}
else
{
console.log("Score update successful");
updated = true;
my_read();
}
});
}
function my_delete()
{
console.log("my_delete");
db.leaderboard.remove({name: "sunder"}, function(err, result) {
if(err || !result)
{
console.log("Score delete failed");
}
else
{
console.log("Score delete successful");
process.exit();
}
});
}
// kick off the flow of processes
my_create();