2017-01-12 72 views
0

我想運行一個mysql查詢使用節點js和回調函數我想傳遞一些額外的參數。在節點js傳遞mysql查詢回調函數的額外參數

for (var i = 0; i < categories.length; i++) 
{ 
    connection.query ('select * from products where category=' + categories[i] , function (err, products) { 
      if (products != undefined && products.length > 0) 
      { 
       // want to do some processing based on product data and category name 
      } 
    }); 
} 

在上面的代碼中,如何將類別名稱傳遞給回調函數?我知道我可以在sql查詢中進行連接,並且這會給我產品中的數據,但只是想知道是否有任何數據在回調函數中傳遞。

+1

關閉....... –

+0

不知道如何做到這一點在我的情況,但會試一試。 –

回答

0

只需使用const。此外,不要通過簡單地將字符串連接到變量來構造查詢。

例子:

for (var i = 0; i < categories.length; i++) 
{ 
    const categoryName = categories[i]; 
    connection.query('select * from products where category = ?', 
        [categoryName], 
        function (err, products) { 
     if (err) 
     throw err; 
     if (products.length > 0) 
     { 
     // use `categoryName` 
     } 
    }); 
} 

您可能還需要考慮使用一個數據庫連接池,而不是隻是一個單一的連接(因爲所有的查詢進行排隊,只有一個查詢可以在每個連接任何給定的時間內執行) 。

+0

如果你使用const,那麼這個category變量只能被設置一次嗎?第一個? –

+0

它被設置一次(*每次迭代*),但它被限制在'for'塊的範圍內(而'var'被限制在最接近的'function'範圍內,這個範圍要寬得多)。如果您要修改該塊中其他位置的值,則必須使用'let' *或*使用閉包+ var'。 – mscdex

+0

我試過了,但是在for塊中設置的值似乎沒有變化。 –