2017-08-19 48 views
-1

在做的NodeJS查詢時,我得到這個錯誤:類型錯誤:val.slice不是一個函數

[2017-08-19 19:06:55.946] [ERROR] error - TypeError: val.slice is not a function 
    at escapeString (/var/www/Bot/node_modules/sqlstring/lib/SqlString.js:183:23) 
    at Object.escape (/var/www/Bot/node_modules/sqlstring/lib/SqlString.js:53:21) 
    at Connection.escape (/var/www/Bot/node_modules/mysql/lib/Connection.js:270:20) 

查詢:

pool.query('INSERT INTO trades SET user = ' + pool.escape(row[i].csteamid) + ', tid = ' + pool.escape(makeTID) + ', status = ' + pool.escape('PendingAccept') + ', items = ' + pool.escape(Items.join('/')) + ', action = ' + pool.escape('expired') + ', code = ' + pool.escape(cod)); 

我怎樣才能解決這個問題?我沒有在查詢中使用「val」或切片函數。

回答

0

這表示您的pool.escape調用的參數不是字符串。 slice用於執行那escape方法。

有三個候選電話,可能是負責這個錯誤:

pool.escape(row[i].csteamid) 
pool.escape(makeTID) 
pool.escape(cod) 

調試你的代碼,看看其中之一是(有時)不是一個字符串(如nullundefined或對象。 ...)

您可以強制的說法是這樣的字符串,儘管這幾乎肯定不會得到預期的結果:

pool.escape(row[i].csteamid + '') 
pool.escape(makeTID + '') 
pool.escape(cod + '') 

更好的是在創建此SQL字符串之前測試數據類型,使用以下代碼:

if (typeof row[i].csteamid !== 'string') throw `row[${i}].csteamid is not a string, but ${typeof row[i].csteamid}`; 
if (typeof makeTID !== 'string') throw `makeTID is not a string, but ${typeof makeTID}`; 
if (typeof cod !== 'string') throw `cod is not a string, but ${typeof cod}`; 
+0

你說得對! makeTID是一個返回字符串的函數。所以我做了一個名爲makeTID的變量,在查詢之前運行該函數。奇蹟般有效。 編輯:可能也可以運行pool.escape()內部的函數。 –

相關問題