2012-05-11 13 views
8

मैं संग्रहीत प्रक्रियाओं का समर्थन करने वाले नोडजेस के लिए एक mySQL ड्राइवर ढूंढ रहा हूं।क्या mysql के लिए nodejs पर ड्राइवर है जो संग्रहित प्रक्रियाओं का समर्थन करता है?

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

Node.js: http://nodejsdb.org/db-mysql/ है कि मैं का उपयोग किया गया त्रुटि

प्रक्रिया एक परिणाम दिए गए संदर्भ

+0

कृपया अपना कोड दिखाएं। – eggyal

+0

यहां एक नमूना है http://pastebin.com/8sh1vXrP – abinop

+1

यदि आप इस मॉड्यूल को क्रैक करने में सक्षम नहीं हैं, तो आपके पास हमेशा कुछ और विकल्प हैं, https://github.com/joyent/node/wiki/ देखें मॉड्यूल # विकी-डीबी-माइस्क्ल – Futur

उत्तर

4

यह nodejs-mysql-native

संग्रहीत प्रक्रिया में काम करता है में सेट वापस नहीं लौट सकते देता है स्क्रिप्ट:

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! 
11

फेलिक्स Geisendörfer के node-mysql का समर्थन करता है संग्रहित प्रक्रियाओं, लेकिन आप जैसे आप कोई SELECT क्वेरी एक सफलता/असफलता झंडा ing 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 ... 

    } 
}); 
+1

आपको पैरामीटर मानों के इस स्ट्रिंग कॉन्सटेनेशन के साथ मजाक करनी होगी। क्या आप एसक्यूएल इंजेक्शन चाहते हैं? इस तरह हम एसक्यूएल इंजेक्शन प्राप्त करते हैं। – moron4hire

+1

शायद उदाहरण को अपडेट किया जाना चाहिए ताकि यह दिखाया जा सके कि ठीक से कैसे बचें, उदा। https://www.npmjs.com/package/mysql#escaping-query-values ​​ – kurttheviking

+1

आप + client.escape (myParams) + का उपयोग करके आसानी से बच सकते हैं + – user3564573

3

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(); 
}); 

इस तरह एसक्यूएल इंजेक्शन की चिंता करने की कोई जरूरत नहीं कहते हैं।

here NodeJS पर अच्छा ट्यूटोरियल और mysql

0

पूर्णता के लिए एक साथ कई समाधान लाना

संग्रहित प्रक्रिया है:

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

Node.js और एक्सप्रेस कोड:

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'); 
}); 

(स्रोत क्रेडिट: पुष्कर यादव और "http://www.javascriptpoint.com/nodejs-mysql-tutorial-example/ ")

संबंधित मुद्दे

 संबंधित मुद्दे