2017-07-06 17 views
0

npmパッケージmysql(2.13.0)を使用して、Node.JS(6.10.3)で書かれたAWS Lambdaで動作するAPIを持っています。これは、Serverlessを使用して配備および管理されます。node.js mysql INSERT ERROR near HANDLER RESOLVED

私は、次のコードを使用してMariaDB RDSインスタンス上のテーブルに単一の行を挿入しています:私はテーブルをチェックすると、私は挿入が正常に完了し、新しい行を持っていることがわかります

var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    "host": process.env.CONFIG_HOST, 
    "user": process.env.CONFIG_WRITE_USER, 
    "password": process.env.CONFIG_WRITE_PW, 
    "database": process.env.CONFIG_DB, 
    "connectionLimit": 1 
}); 

module.exports.post = (event, context, callback) => { 
    var body = JSON.parse(event.body); 
    var params = event.someParameter; 
    var sql = getSql(body.name); 

    console.log(sql); 
    connection.query(sql, onQueryComplete(params, callback)); 
} 

const onQueryComplete = function(params, callback) { 
    return function(error, result) { 
    if (error) { 
     console.log(error); 
     callback(null, 'some error response'); 
    } 

    // do something else... 
    } 
} 

function getSql(name) { 
    return ` 
    INSERT INTO lds_config.test_table 
    (
     name, 
     name_hash 
    ) 
    VALUES 
    (
     '${name}', 
     MD5('${name}') 
    );`; 
} 

を追加されましたが、エラーが設定されています - 何かがどこかで間違っている(挿入の後にある可能性がある)ことを意味します。

(にconsole.logで)のMySQLによって返されたエラーがある:

{ 
    Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'HANDLER RESOLVED _____'); 
    // Timeout clearing if needed 
     ' at line 2 
    at Query.Sequence._packetToError (...\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14) 
    at Query.ErrorPacket <<stack trace continues>>) 
    code: 'ER_PARSE_ERROR', 
    errno: 1064, 
    sqlState: '42000', 
    index: 0 
} 

これは、第2のエラーが続き、そのコールバックを記載する関数はない:

Debug: internal, implementation, error 
TypeError: Uncaught error: callback is not a function 

同様コードされます選択のためにAPIの別の場所で作業しています。ありがとう!

さらに注記: テーブルです:

CREATE TABLE lds_config.test_table(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(500), name_hash CHAR(32)); 

console.log(sql);からの結果は次のとおりです。私はMySQLのワークベンチで直接それを実行したときに動作します

INSERT INTO lds_config.test_table 
(
    name, 
    name_hash 
) 
VALUES 
(
    'test01', 
    MD5('test01') 
); 

答えて

1

最初のエラーはMySQL構文に関するものでもあるので、クエリも含めてください。コールバックについては、私が見る限り、以下のコードではパラメータとして渡されない関数ではありません。

const onQueryComplete = function(params) { 
    return function(error, result, callback) { 
    if (error) { 
    console.log(error); 
    callback(null, 'some error response'); 
    } 
    // do something else... 
    } 
} 

以上が修正されたものです。

+0

ありがとうございました - コードをコピーするときに私はそれを忘れました!私はコールバックをonQueryComplete関数に渡していますが、 'function(params、...)'の部分にあります。元のクエリを修正しました。 –

+0

問題を生成するSQLコードを追加するためにオリジナルの投稿を編集しました。 –

+0

okのように見えますが、Sequence.js:52:14を調べることをアドバイスしても、それをデバッグすることさえできます。 – Volem