【发布时间】:2016-01-04 06:31:54
【问题描述】:
我正在编写一个带有消息功能的 Web 应用程序。
我的应用中的对话定义为 2 个不同的用户之间。例如,如果 Adam 刚刚创建了个人资料并向 Jane 发送了 1 条消息,向 Jack 发送了 3 条消息。他会有 2 次对话,但总共有 4 条消息。
在 Express 端的以下代码中,我试图检索数据库中给定用户的所有对话。 完成后,将此数据发送到 Angular 控制器端。 考虑到 JS 是异步的,在下面的 api.js 中执行此操作的正确方法是什么?
public/javascripts/main_controller.js
var mainApp = angular.module('myApp', ['ngRoute', 'btford.socket-io', 'xeditable']);
...
mainApp.controller('MessagesController', function($scope, $http, userSessionService, socket, focus){
console.log("MessagesController running");
$scope.messageDisplay = '';
$scope.username = userSessionService.getUserSession().username;
$http({
url: '/loadConversations',
// url: '/about',
method: "GET"
})
.success(function(response) {
console.log("success with loadConversations: ", response);
console.log(response[0].data);
});
....
})
routes/api.js:
....
router.route('/loadConversations')
.get(isAuthenticated, function(req, res) {
var result = [];
//Find Conversation with each and all distinct users
for(var i = 0; i < req.user.conversations.length; i++){
Conversation.findOne({'_id': req.user.conversations[i]}, function(err, conversation){
if(err){
console.log(err);
}
if(conversation){
var contactUsername = (conversation.initiatorUsername == req.user.username) ? conversation.responderUsername : conversation.initiatorUsername;
var lastMessage = conversation.messages[conversation.messages.length-1].content;
var dateOfMessage = conversation.messages[conversation.messages.length-1].date;
var resultJSON = {contactUsername: contactUsername,
lastMessage: lastMessage,
dateOfMessage: dateOfMessage};
result.push(resultJSON);
} else {
console.log("conversation not found!");
}
//Below is not working, where should I put res.json(result)?
// if(result.length == req.user.conversations.length){
// res.json(result);
// }
});
} });
【问题讨论】:
标签: javascript angularjs node.js mongodb