2017-07-14 1 views
0

Travailler avec un serveur SQL dans NodeJS, et j'ai confirmé qu'il tire les données, mais j'essaie de transmettre les données à une fonction d'appel.Pilote MSSQL NodeJS Passage de données à une fonction d'appel

Voici mon appel à la fonction qui interroge la base de données:

const dbq = require('./dbquery.js'); 
app.get('/:id', (req, res) => { 
    reqlog(`/${req.params.id}`); 
    var set = dbq.getPersonById(req.params.id); 
    console.log(set); 
}); 

et est ici la fonction à l'intérieur dbquery.js:

qry.getPersonById = (id) => { 

    mssql.connect(sqlConfig).then(() => { 
    new mssql.Request().query(`select * from FNVPeople where IndivID=${id}`).then((record)=>{ 
     console.log(record); 
     return record; 
    }).catch((err)=>{ 
     console.log(err); 
    }); 
    }); 
} 

Si mon appel à la fonction ressembler à ceci?

var dataset = await(dbq.getPersonById(req.params.id));

Répondre

0

Vous devez retourner la promesse au client de traiter (note deux returns supplémentaires):

qry.getPersonById = (id) => { 

    return mssql.connect(sqlConfig).then(() => { 
    return new mssql.Request().query(`...`) 
     .then((record)=>{ 
      console.log(record); 
      return record; 
     }) 
     .catch((err)=>{ 
      console.log(err); 
     }); 
    }); 

} 

Ensuite, les offres de clients avec la promesse

app.get('/:id', (req, res) => { 
    reqlog(`/${req.params.id}`); 
    dbq.getPersonById(req.params.id).then(set => 
    console.log(set); 
); 
}); 

En réécrivant les promesses à async/await vous pourriez avoir n ont

qry.getPersonById = async (id) => { 

    try { 
    await mssql.connect(sqlConfig) 
    var record = await new mssql.Request().query(`...`); 
    console.log(record); 
    return record; 
    } 
    catch (err) { 
    console.log(err); 
    } 
} 

et

app.get('/:id', async (req, res) => { 
    reqlog(`/${req.params.id}`); 
    var set = await dbq.getPersonById(req.params.id); 
    console.log(set); 
}); 
+0

Très bien! Je vais aussi essayer cette solution et la conserver pour de futurs projets. –

1

En raison de la nature Async.

Essayez les points suivants:

const dbq = require('./dbquery.js'); 
app.get('/:id', (req, res) => { 
    reqlog(`/${req.params.id}`); 
    dbq.getPersonById(req.params.id, function(err, res){ 
     console.log(res); 
    });  
}); 


qry.getPersonById = (id, callback) => { 

    mssql.connect(sqlConfig).then(() => { 
     new mssql.Request().query(`select * from FNVPeople where IndivID=${id}`).then((record)=>{ 
      console.log(record); 
      callback(null, record); 
     }).catch((err)=>{ 
      console.log(err); 
     }); 
     }); 
    } 
+0

Très intelligent, toujours callbacks utilisé avant, mais jamais écrit quelque chose qui nécessitait un! C'est une excellente solution! mettre en œuvre maintenant. Merci! –

+0

@ChrisRutherford: étant donné que vous utilisiez déjà des promesses, vous n'avez pas besoin de «rétrograder» pour les rappels, même si c'est techniquement correct. Jetez un oeil à ma réponse. –

+0

@WiktorZychla Je l'ai fait, et merci! –