nodejs上有支持存储过程的mysql驱动吗?

我正在寻找支持存储过程的nodejs的mySQL驱动程序。 http://nodejsdb.org/db-mysql/ ,我一直在使用给出的错误

PROCEDURE不能返回给定上下文中的结果集

它在nodejs-mysql-native中工作

存储过程:

DELIMITER // CREATE PROCEDURE test1p1() BEGIN SELECT 1+1; END // DELIMITER ; 

node.js脚本:

 mysql = require('mysql-native'); var db = mysql.createTCPClient(); db.auth('test', 'tester', ''); // db, user, password db.query('call test.test1p1;').on('row', function(r) { console.log(r); }).on('end', function() { console.log('OK!'); }); 

输出:

 { '1+1': 2 } OK! 

FelixGeisendörfer的node-mysql支持存储过程,但是您需要通过SELECT成功/失败标志来结束存储过程,然后像查询SELECT查询它。 以下是存储过程的外观:

 DELIMITER // DROP PROCEDURE IF EXISTS MyProcedure // CREATE PROCEDURE MyProcedure(IN param1 VARCHAR/*, My, Parameters, ... */) BEGIN DECLARE EXIT HANDLER FOR NOT FOUND, SQLWARNING, SQLEXCEPTION SELECT 0 AS res; # My Queries etc. ... SELECT 1 AS res; END // DELIMITER ; 

你的节点代码看起来像这样:

 var mysql = require('mysql'); var client = mysql.createConnection({ host : '127.0.0.1', user : 'username', password: 'password' }); client.query('USE mydatabase'); var myParams = "'param1', 'param2', ... "; client.query("CALL MyProcedure(" + myParams + ")", function(err, results, fields) { if (err || results[0].res === 0) { throw new Error("My Error ... "); } else { // My Callback Stuff ... } }); 

node-mysql驱动程序使用存储过程,它非常简单,只需调用存储过程的参数。

 CREATE PROCEDURE GetAllStudent(id int) BEGIN SELECT * FROM student where userid = id ; END; 

并在节点中调用

 app.get('/sp', function (req, res, next) { connection.connect(); connection.query('CALL GetAllStudent(?)',[req.body.id],function (err, rows, fields) { if (err) { res.status(400).send(err); } res.status(200).send(rows); }); connection.end(); }); 

这样就不用担心sql注入了。

这里是关于nodejs和mysql的很好的教程

把多个解决scheme放在一起以保证完整性

存储过程:

 CREATE PROCEDURE GetStudent(id int) BEGIN SELECT * FROM student where userid = id ; END; 

Node.js和Express代码:

 var express = require('express'); var mysql = require("mysql"); var app = express(); var pool = mysql.createPool({ connectionLimit: 100, host: 'localhost', user: 'root', password: '', database: 'demo' }); app.get('/pool', function (req, res) { var studentId = req.body.id; pool.getConnection(function (err, connection) { // connected! (unless `err` is set) if (err) { res.status(400).send(err); } connection.query('CALL GetStudent(?)',[studentId], function (err, rows, fields) { connection.release(); if (err) { res.status(400).send(err); } res.status(200).send(rows); }); }); }); app.listen(4000, function () { console.log('Server is running.. on Port 4000'); }); 

(来源:Pushker Yadav和“ http://www.javascriptpoint.com/nodejs-mysql-tutorial-example/ ”)