2017-10-13 12 views
1

私はまだjsを学んでいますが、私はnodejsに基本的なサーバーを書こうとしています。 サーバーはクエリを受け取り、DBからJSONを返します。dbとサーバーの約束を使用

私は約束を使用しようとしていますが、これについて私の頭を得ることができます。 私のサーバーは空の返信を返します。 どうしたの?これまで

私のサーバーファイル(簡体字):これまでのところ(簡体字)

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

私のDBファイル:

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

答えて

0

私のサーバーが空の応答を返します。だから私は間違って何をしていますか?

dbResundefinedです。これは、非同期の約束の実行からの応答が期待されるためです。約束が解決した後にのみ、回答を送る必要があります。

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

あなたのコードに、この変更を行う

はまた、あなたはデシベル実行部に約束を返却する必要があります。

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 ill tr​​y it =>表記は何ですか? – ortusolis

+0

これは 'this'に束縛されない短い関数です。たとえば、[mdn](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)を確認することができます – Sridhar

+0

よろしくお願いします。 – ortusolis