1
REST APIリクエストを処理し、MongoDBデータベースからデータを取得する簡単なexpress.jsサーバーを作成しました。私が特定のエンドポイント( "localhost:8081/api/getUserData")にGET要求をすると、promise chainは私の望むやり方では動かず、まだ理解しません。Express promise chainエラー
これは私が取得エラーです:私はしませんので、任意の助けをさらに説明と感謝、そしてられる
var MongoClient = require('mongodb').MongoClient;
var express = require('express');
var app = express();
var rp = require("request-promise");
var cors = require('cors');
// use it before all route definitions
app.use(cors({ origin: '*' }));
/********************** REST API FUNCTIONS **********************/
app.get('/api/getUserData', function (req, res, next) {
var context = {};
console.log("in api getUserData")
context.db_url = 'mongodb://localhost:27017/test';
openDatabaseConnection(context)
.then(getAllUserLocations)
.then(closeDatabaseConnection)
.then(function (context) {
res.send(context.userLocations)
})
.catch(function (error) {
console.log("ERROR :");
console.log(error);
})
})
/********************** END REST API FUNCTIONS **********************/
function getAllUserLocations(context) {
context.db.collection("test").find().toArray().then(function (err, result) {
console.log("Received from db: " + result.length + " objects");
context.userLocations = result;
return context;
});
}
function openDatabaseConnection(context) {
console.log("Opening DB connection...");
return MongoClient.connect(context.db_url)
.then(function (db) {
console.log("DB connection opened.");
context.db = db;
return context;
})
}
function closeDatabaseConnection(context) {
console.log("Closing DB connection");
return context.db.close()
.then(function() {
console.log("DB connection closed");
return context;
})
}
/********************** STARTING SERVER **********************/
var server = app.listen(8081, function() {
var host = server.address().address
var port = server.address().port
console.log("Githex server listening at http://%s:%s", host, port)
})
: 「[プロパティを読み取ることができません未定義の 『DB』はTypeError]」私が間違ったことを理解する。
ありがとうございます!
'context'は' db_url'プロパティだけを持つオブジェクトとして定義されているので、 'getAllUserLocations'関数で使用するときは' db'プロパティを持たない – adeneo
残念ながらそれはそうではありません。私は 'db'プロパティを指定せずに動作する別のAPI要求ハンドラを提供したコードを削除しました。私はプロミスチェーンの前にdbプロパティを追加しようとしましたが、どちらも解決しません。 –
あなたが正しいです、エラーは 'context'があなたの関数の中で未定義であることを示します。プロパティ 'db' undefinedの*、それはおそらく行番号とより詳細な情報がどこに付属しています。 – adeneo