【问题标题】:ExpressJS response to POST is undefined after accessing MongoDB?访问 MongoDB 后 ExpressJS 对 POST 的响应未定义?
【发布时间】:2015-10-08 06:13:29
【问题描述】:

我正在使用 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);

我已经为此苦苦挣扎了很长时间,并在论坛中搜索了解决方案,但找不到任何解决方案。感谢您的任何反馈。

【问题讨论】:

    标签: javascript mongodb express http-post


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-09-16
      • 2018-07-30
      • 2022-12-05
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2019-10-12
      • 2018-01-08
      相关资源
      最近更新 更多