nodejs的SQL语法错误

时间:2018-03-18 16:14:11

标签: javascript mysql node.js

我正在尝试从插入数据库的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及其不需要的信息。

1 个答案:

答案 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)