11
votes

Existe-t-il un pilote pour MySQL sur Nodejs qui prend en charge les procédures stockées?

Je recherche un pilote MySQL pour NODEJS qui prend en charge les procédures stockées. http://nodejsdb.org/db-mysql/ que j'ai utilisé donne donne l'erreur

Procédure ne peut pas renvoyer un ensemble de résultats dans le contexte donné


2 commentaires

Voici un exemple Pastebin.com/8SH1VXRP


Vous avez toujours quelques options supplémentaires, si vous n'êtes pas en mesure de casser ce module, cochez GITUB.COM/JOYENT/NODE/WIKI/MODULES#WIKIDB-MYSQL


5 Réponses :


4
votes

Il fonctionne dans Nodejs-mysql-natif

Procédure stockée: p> xxx pré>

nœud.js script: p> xxx pré>

sortie: p>

{ '1+1': 2 }
OK!


0 commentaires

13
votes

Felix Geisendörfer's Node-MySQL prend en charge les procédures stockées, mais vous devez mettre fin à votre stockage stocké. PROCÉDURE PAR SELECT CODE> ING Un drapeau de réussite / Échec, puis la questionner comme vous le feriez un Sélectionnez CODE> Query. Voici comment la procédure stockée pourrait regarder: xxx pré>

Votre code de nœud ressemblerait à ceci comme suit: P>

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 ...

    }
});


3 commentaires

Vous plaisantez avec cette concaténation de la chaîne de valeurs de paramètre. Voulez-vous une injection SQL? C'est ainsi que nous obtenons une injection SQL.


L'exemple devrait peut-être être mis à jour pour montrer comment s'échapper correctement, par exemple. NPMJS.com/package/mysql#escaping-query-values ​​


Vous pouvez simplement échapper à + client.escape (myParams) +



6
votes

Node-MySQL conducteur conducteur avec procédure stockée et son très simple Appelez votre procédure stockée avec le paramètre.

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


0 commentaires

0
votes

Mettre plusieurs solutions ensemble pour l'exhaustivité

Procédure stockée: P>

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


0 commentaires

1
votes

Bien que cela ait été répondu, je contribuerai avec ma propre version, espérons que cela vous aide et que quiconque qui trébuche sur ce post

Dans votre cas, c'est ainsi que je voudrais, dans un seul fichier, faire ( La voie de 2019, un peu ...) Ce que vous essayez d'atteindre (pas besoin de quelque chose d'autre, puis eXpress Cadre et le package MySQL par défaut qui utilise principalement tout le monde)

Premièrement, installez ces deux paquets: < / p>


0 commentaires