2017-03-23 50 views
1

我目前正在使用MySQL數據庫處理NodeJS應用程序。如何使用NodeJS處理這些MySQL情況

我在創建一些網站時習慣於使用PHP/MySQL,我想知道這是不是阻礙了我在開發NodeJS應用程序。

通常情況下,使用PHP/MySQL的我有這樣的情況:我想找回我的美麗烹飪網站的所有配方,存儲在表食譜,併爲每個食譜,我想檢索存儲在作者信息表成員

使用PHP/MySQL的,一個可能的方式做到這一點是使用MySQL的加入,但我也喜歡這樣做了這種方式:

/* Let's retrieve all recipes */ 
    $recipes = $this->recipe_model->all(); 

    /* 
     For each recipe, let's get the author information 
     using the author id stored in the recipe 
    */ 
    foreach ($recipes as $key => $recipe) { 
     $recipes[$key]["author"] = $this->author_model->get($recipe["author"]); 
    } 

其實,我想重現這在我的NodeJS但由於異步系統,這很複雜。 我試圖使用異步,但我想確保它是我的問題的唯一替代方案。

也許我在NodeJS中也有問題(我對這項技術沒有太多的經驗)。

任何建議?

在此先感謝!

回答

1

如果你的數據庫查詢功能返回promises,你可以做這樣的事情:

const recipesPromise = db.from('recipes').all(); 

const authorsPromise = recipesPromise.then((recipes) => { 
    return Promise.all(recipes.map(getRecipeAuthor)); 
}); 

authorsPromise.then((authors) => { 
    // do something with the authors array here 
}); 

function getRecipeAuthor(recipe) { 
    return db.from('authors').where('id', recipe.authorId).first(); 
} 

隨着async functions,這是更簡單:

function getRecipeAuthor(recipe) { 
    return db.from('authors').where('id', recipe.authorId).first(); 
} 

async function getRecipiesAndAuthors() { 
    const recipes = await db.from('recipes').all(); 
    const authors = await Promise.all(recipes.map(getRecipeAuthor)); 

    return {recipes, authors}; 
} 

getRecipiesAndAuthors() 
    .then((result) => { 
    const recipes = result.recipes; 
    const authors = result.authors; 
    /* Do something with recipes/authors */ 
    }) 
    .catch((error) => { 
    /* Handle errors */ 
    }); 
+0

似乎很大!我會盡快嘗試,謝謝:-) – Dash

相關問題