[英]sql syntax error with nodejs
我正在尝试从插入数据库的API中提取结果。 程序运行时返回SQL错误。 似乎我没有以正确的语法发送此消息,而且我似乎无法做到这一点。 有一个更好的方法吗?
var request = require('request');
var mysql = require('mysql');
var replace = require ('Regexp')
var url = 'https://api.nicehash.com/api?method=stats.provider.workers&addr=3Hwm6i8aefzHhJTbEGtSJeR6tZCJXqY7EN';
//connect to database
var con = mysql.createConnection({
host: 'localhost',
user: 'xxxxx',
password: 'xxxxx',
database: 'xxxxx',
table: 'workerstats'
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
const requestHandler = (request, response) => {
response.end(workerstats)
}
request.get({
url: url,
json: true,
headers: {'User-Agent': 'request'}
}, (err, res, data) => {
if (err) {
console.log('Error:', err);
}
else if (res.statusCode !== 200)
{
console.log('Status:', res.statusCode);
}
else {(!err && data && data.result && data.result.workers)
var workerstats = JSON.stringify(data.result.workers);
var wsclean = workerstats.replace(/[&\/\\#+()$~%'*?<>{}]/g,'')
.replace(/"a":/g,'');
};
console.log(wsclean);
var sql = "INSERT INTO 'workerstats' (workers, accepted, uptime, xnsub, difficulty, zone, algo) ?", wsclean;
con.query(sql, [workerstats], function (err, result) {
if (err) throw err;
console.log("Number of records inserted: " + result.affectedRows);
}
);
})
编辑:好的,所以在经过数小时的修补之后,我“认为”我已经取得了进步,但是那可笑的A:又让我得到了。 将其视为对象,SQL拒绝了它。 尽管我以为(尽管显然不正确),但我将其转换为字符串。 这是修改后的代码。 请原谅格式,播放效果不好。
request.get({
url: url,
json: true,
headers: { 'User-Agent': 'request' }
}, (err, res, data) => {
if (err) {
console.log('Error:', err);
}
else if (res.statusCode !== 200) {
console.log('Status:', res.statusCode);
}
else {
(!err && data && data.result)
var data = JSON.parse(data.result);
var responseJson = JSON.stringify(data.response);
var query = connection.query('INSERT INTO table SET column=?', responseJson, function (err, result) {
if (err) throw err;
console.log('data inserted');
});
}
});
它返回以下错误:
undefined:1 [object Object] SyntaxError:位置1的JSON中的意外令牌o
太棒了 所以我在某个地方做了一些愚蠢或不当的事情。 在原始API中,对象Object的显示如下:{“ a”:“ 158.01”}-当我以为已经做到了,如何将其转换为字符串? 我还想完全消除“ a”和“:”,因为我不确定如何将其处理为SQL及其不需要的信息。
在request选项中设置json: true
时,您不再需要执行JSON.parse(data.result)
,您可以直接将数据作为对象访问。 因此发生错误,因为JSON.parse({ a: 1})
调用toString方法,并且结果[object Object]
其无效的JSON。
注意:您将data.result.workers
转换为字符串。 我认为您应该将其作为数组工作。
con.query(sql, data.result.workers, function (err, result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.