我正在使用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);
我一直在努力解决这个问题,并在论坛上寻找解决方案,却找不到任何解决方案。感谢您的任何反馈。
答案 0 :(得分:0)
我不知道为什么这个问题还没有得到解答。当我遇到同样的问题时,我了解到在DB事务完成后会返回对所有数据库查询的响应。尝试将db.close()放在find()调用的成功回调响应中。