2017-10-13 3 views
1

J'apprends encore js, mais je suis en train d'essayer d'écrire un serveur de base dans nodejs. Le serveur est censé prendre une requête, puis renvoyer un JSON à partir d'un db. J'essaie d'utiliser mes promesses, mais je peux comprendre ce que je veux dire. Mon serveur renvoie une réponse vide. Alors qu'est-ce que je fais mal?Utiliser les promesses pour db et server

Mon fichier serveur jusqu'à présent (simplifié):

http.createServer(function (request, response) { 
    if (request.method === "GET") { 
    ... 
    var dbRes = dbFunc.getFromDB(query); 
    response.statusCode = 200; 
    response.setHeader('Content-Type', 'application/json'); 
    response.end(JSON.stringify(dbRes)); 
    } 
}).listen(port); 

Mon fichier db à ce jour (simplifié):

exports.readHandeler = function (query) { 

    var promise = new Promise(function(resolve, reject) { 
    db.collection('data').find(query).toArray(function(err, res) { 
     if (err) { 
     throw err; 
     reject(-1); 
     } 
     resolve(res);  
    }  
    }); 

    promise.then(function(result) { 
    return result; 
    }, function(err) { 
    return -1; 
    }); 
} 

Répondre

0

Mon serveur renvoie une réponse vide. Alors qu'est-ce que je fais mal?

Votre dbRes sera undefined puisque vous vous attendez une réponse de l'exécution de la promesse async. Vous devez envoyer une réponse seulement après la résolution de la résolution.

Faire ce changement à votre code

http.createServer(function (request, response) { 
    if (request.method === "GET") { 
    ... 
    dbFunc.getFromDB(query).then((dbRes) => { 
     response.statusCode = 200; 
     response.setHeader('Content-Type', 'application/json'); 
     response.end(JSON.stringify(dbRes)); 
    }).catch((err) => { 
     console.log('err', err.stack); 
    }); 

    } 
}).listen(port); 

, vous devez également retourner Promise en partie db d'exécution.

exports.readHandeler = function (query) { 
    return new Promise(function (resolve, reject) { 
    db.collection('data').find(query).toArray(function (err, result) { 
     if (err) { 
     return reject(err); // or -1 based on your need 
     } 
     return resolve(result); 
    }); 
    }); 
}; 
+0

Thx mal l'essayer, que signifie la notation =>? – ortusolis

+0

Il s'agit d'une fonction plus courte sans liaison 'this'. Pour des exemples, vous pouvez vérifier [mdn] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) – Sridhar

+0

Ok, je comprends, ty – ortusolis