2017-09-04 56 views
0

嘿,我正在建立我的第一個hapi API,我連接到一個SQL服務器數據庫就好了,但我試圖建立一個動態查詢字符串基於客戶端發送給我。所以現在我從查詢字符串中獲取不同的參數,但是有時它們可​​能是空的或者不是,這取決於用戶填充的內容是我發送給服務器的更健壯的查詢。這裏是我的代碼試圖與節點hapi建立一個動態查詢字符串

handler: (request, reply) => { 
      const query = request.query; 
      const quoteNum = request.query.QuoteNum; 
      let numOfQuotes = request.query.NumOfQuotes; 
      let filterType = request.query.Filter; 
      const beginDate = request.query.StartDate; 
      const endDate = request.query.EndDate; 
      const optionsType = request.query.MoreOptionsType; 
      const optionsQuery = request.query.moreOptionsQuery; 
      const optionsValue = request.query.MoreOptionsString; 
      switch (numOfQuotes) { 
       case '100': 
        numOfQuotes = "SELECT TOP 100"; 
        break; 
       case '200': 
        numOfQuotes = "SELECT TOP 200"; 
        break; 
       case '500': 
        numOfQuotes = "SELECT TOP 500"; 
        break; 
       case '1000': 
        numOfQuotes = "SELECT TOP 1000"; 
        break; 
       case '2000': 
        numOfQuotes = "SELECT TOP 2000"; 
        break; 
       case '5000': 
        numOfQuotes = "SELECT TOP 5000"; 
        break; 
       case '10000': 
        numOfQuotes = "SELECT TOP 10000"; 
        break; 
       case 'ALL': 
        numOfQuotes = "SELECT"; 
        break; 
       default: 
        numOfQuotes = "SELECT TOP 50"; 
      } 
      if (filterType != '') { 
       switch (filterType) { 
        case 'Q': 
         filterType = " AND SOHeader.SOTypeID = 'Q'" 
         break; 
        case 'SO': 
         filterType = " AND SOHeader.SOTypeID = 'SO'" 
         break; 
        case 'TI': 
         filterType = " AND SOHeader.SOTypeID = 'TI'" 
         break; 
        case 'SO & TI': 
         filterType = " AND SOHeader.SOTypeID IN ('SO', 'TI')" 
         break; 
        case 'RPL': 
         filterType = " AND SOHeader.SOTypeID = 'RPL'" 
         break; 
        case 'RFC': 
         filterType = " AND SOHeader.SOTypeID = 'RFC'" 
         break; 
        case 'BT': 
         filterType = " AND SOHeader.SOTypeID = 'BT'" 
         break; 
        case 'CW': 
         filterType = " AND SOHeader.SOTypeID = 'CW'" 
         break; 
        case 'CWR': 
         filterType = " AND SOHeader.SOTypeID = 'CWR'" 
         break; 
        case 'CWR & BT & CW': 
         filterType = " AND SOHeader.SOTypeID IN ('CWR','BT','CW')" 
         break; 
       } 
      } 
      conn.connect().then(() => { 
       const req = new sql.Request(conn); 
       let myBeginQuery = `${numOfQuotes} DISTINCT SOHeader.OrdNbr, soheader.sotypeid, soheader.user6, SOheader.LUpd_DateTime, SOHeader.User3, soheader.crtd_user, SOHeader.S4Future01, SOHeader.SlsperID, SOHeader.TotMerch, SOHeader.CustOrdNbr 
       FROM SOHeader 
       INNER JOIN Customer ON SOHeader.CustID = Customer.CustId 
       INNER JOIN SOLine ON SOHeader.OrdNbr = SOLine.OrdNbr 
       WHERE soheader.CpnyID = 'AOS' 
       and Customer.custid = @input_param`; 
       let myQuery = ''; 
       if (filterType != '') { 
        myQuery = myBeginQuery + filterType; 
       } 
       console.log(myQuery); 

當我CONSOLE.LOG(更改爲MyQuery)它仍然是空白的,我認爲我需要promisfy它或東西,因爲這樣的JavaScript執行。任何建議將有幫助謝謝

回答

0

從您的代碼,myQuery變量可以是空的唯一方法是如果filterType變量爲空。

確保您傳遞正確的價值在您的查詢字符串變量Filter通過在打印到控制檯

console.log(request.query.Filter); 

因爲你只打印查詢字符串你不需要承諾這一點。

+0

這絕對不是空白.. – josh