我想用MongoDB, Angular, NODE.js和Express创建一个简单的留言板。
由于某种原因,我第一次调用getMessages()时一切正常。但是当我在postMessage()之后调用getMessages()时,没有发送GET请求。
这些是我的路由:
app.get('/api/message', function(req, res) {
Message.find({}).exec(function(err, result) {
res.send(result);
});
});
app.post('/api/message', function(req, res) {
console.log(req.body);
var message = new Message(req.body);
message.save();
res.status(200).send('Message added');
})
这是我的角控制器:
(function() {
'use strict';
angular
.module('app')
.controller('MainController', mainController);
function mainController(navigationFactory, $http, $timeout, apiFactory, $scope) {
var that = this; // jshint ignore: line
function init() {
that.getMessages();
}
that.postMessage = function() {
apiFactory.postMessage(that.message).then(function() {
console.log('Posted from controller'); //gets logged
that.getMessages();
});
//that.getMessages(); <-- also tried this
}
that.getMessages = function() {
console.log('Getting from controller'); //gets logged
$http.get('http://localhost:5000/api/message').then(function(result) {
console.log(result.data); //Logs old result, without new message
that.messages = result.data;
console.log('Set data'); //gets logged
});
}
init();
}
})();
最后我使用一个工厂来发布消息:
factory.postMessage = function(message) {
return $http.post('http://localhost:5000/api/message', {msg: message});
}
我已经打开了一个类似的问题,但由于这是一个不同的问题,我想我应该再问一遍。
为什么没有HTTP GET请求,即使getMessages()显然在我的postMessage()函数中被调用。我可以看到getMessages()是在console.log()的帮助下调用的,但它似乎在发送任何请求之前返回。
我认为,问题是在服务器端承诺,尝试使用这个
app.get('/api/message', function(req, res) {
return Message.find({}).exec(function(err, result) {
if(err) {
return res.status(500).send(err);
}
return res.status(200).json(result);
});
});
我认为你可能会遇到一个提升问题,基本上调用一个尚未声明的函数。如果你像这样改变顺序会发生什么?
var that = this; // jshint ignore: line
that.getMessages = function() {
console.log('Getting from controller'); //gets logged
$http.get('http://localhost:5000/api/message').then(function(result) {
console.log(result.data); //Logs old result, without new message
that.messages = result.data;
console.log('Set data'); //gets logged
});
}
that.postMessage = function() {
apiFactory.postMessage(that.message).then(function() {
console.log('Posted from controller'); //gets logged
that.getMessages();
});
//that.getMessages(); <-- also tried this
}
function init() {
that.getMessages();
}
init();
var functionName = function() {} vs function functionName() {}
编辑:我修好了你的活塞,它似乎工作得很好!
问题是,你没有注入$http
到你的控制器…这就是为什么你的GET请求从来没有发生过
https://plnkr.co/edit/NyI1qa63NG8gFfuc45jj?p =预览