我正在尝试从插入数据库的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');
});
}
});
它返回以下错误:
未定义:1 [对象] SyntaxError:位置1的JSON中的意外标记o
真棒。所以在某个地方,我做了一些愚蠢或不正确的事情。在原始API中,对象Object显示为:{“a”:“158.01”} - 如何将其转换为字符串,当我以为我已经这样做了?我也想完全消除'a'和':',因为我不知道如何将其处理成SQL及其不需要的信息。
答案 0 :(得分:0)
在请求选项中设置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)