访问MongoDB后,ExpressJS对POST的响应是不确定的?

时间:2015-10-08 06:13:30

标签: javascript mongodb express http-post

我正在使用MEAN框架和MVC设计模式制作Web应用程序。我正在尝试从Angular前端执行POST请求,以便在我的服务器端MongoDB(版本2.4.9)中查找文档。控制台日志显示查询成功,但是当我尝试将响应发送回客户端时,查询结果未定义。

我知道NodeJS是异步的并且使用回调,但我无法理解我的代码有什么问题。我尝试使用返回和回调,但我无法使其正常工作。我很困惑如何使用控制器访问模型并让控制器最终发送响应。

这是我连接数据库(模型)的代码:

module.exports = {

readDocument : function(callback, coll, owner) {  

    // Connect to database
    MongoClient.connect("mongodb://localhost:27017/tradingpost", function(err, db) {
            if (err) { 
            console.log("Cannot connect to db (db.js)");
            callback(err);
            }
        else {
                console.log("Connected to DB from db.js: ", db.databaseName);

                //Read document by owner

                // Get the documents collection
                var collection = db.collection(coll);

                // Find document
                collection.find({owner: owner}).toArray(function (err, result) {
                    if (err) {
                        console.log(err);
                    } else if (result.length) {
                        console.log('Found:', result);
                    } else {
                        console.log('No document(s) found with defined "find" criteria!');
                    }

                // Close connection
                db.close();

                return callback(result);
                });

        }
    })
}}

这是我的控制器发送响应:

var model = require('../models/db');
exports.sendRecentPosts = function (req,res) {

   // Connect to the DB
   // Run query for recent posts
   // Close the connection
   // Send the data to the client
   var result = model.readDocument(dbCallback, "gs", "Mana");
   res.end( result );

};

客户的帖子请求:

    // Use post for secure queries
    // Need recent posts for display
    $http.post('/recent').
       success(function(responseData) {
             $scope.testValue = responseData;
           }).
       error(function(responseData) {
             console.log('Recent posts POST error. Received: ', responseData);
         });

我快速路线的片段:

var goodsServices = require('../controllers/gs-server-controller.js');
app.post('/recent', goodsServices.sendRecentPosts);

我一直在努力解决这个问题,并在论坛上寻找解决方案,却找不到任何解决方案。感谢您的任何反馈。

1 个答案:

答案 0 :(得分:0)

我不知道为什么这个问题还没有得到解答。当我遇到同样的问题时,我了解到在DB事务完成后会返回对所有数据库查询的响应。尝试将db.close()放在find()调用的成功回调响应中。