2017-08-19 39 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()内部的函数。 –

相关问题