У меня есть приложение панели мониторинга стека MEAN (server1), которое взаимодействует с сервером nodejs/express (server2), который отправляет запросы к mongoDB. Например, пользователь должен выбрать месяц в календаре приложения панели управления, и эта дата будет отправлена на сервер nodejs/express, который запросит mongo и вернет, например, количество раз, которое вы посещали в тренажерном зале в течение этого месяца.
Я получаю правильный ответ, но у меня проблемы с обновлением представления (поскольку HTTP-запросы являются асинхронными, запрос в ответе выполняется быстрее и, таким образом, обновляет мое представление с неправильным значением)
Я решил свою просьбу следующим образом:
приложение для панели мониторинга – внешний интерфейс angular
$scope.query = function () {
console.log("I am hereee");
var month = ("0" + ($scope.dt.getMonth() + 1)).slice(-2);
var date = $scope.dt.getFullYear() + "" + month;
var queryData = JSON.stringify({MemberID_Hash: $scope.memberNo, Date_Key_Month: date});
console.log("data: ", queryData);
console.log("url: ", expressQuery);
$http({ //send query to node/express server
method: 'POST',
url: expressQuery,
data: queryData,
withCredentials: true,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
}).then(function(response) { //read backend response
console.log (">>>>>>>>");
$http({
method : "POST",
url : "http://localhost:9000/sendToController"
}).then(function mySucces(response) {
console.log("responde.data: ", response.data);
$scope.nrOfSwipes = response.data;
}, function myError(response) { });
});
};
приложение для панели мониторинга — серверная часть в экспресс-версии
var dataController = "test"; // used a global variable to save the response value to update my view (bad design => thus, any help/suggestions would be greatly appreciated)
module.exports = function(app) {
// receives the response from server2 - !! this is executed 2nd
app.post('/getQueryJson', function(request, response) {
if(response.statusCode == 200) {
console.log("In routes.js TESTING......")
console.log("This is your request: ", request.body);
dataController = request.body;
console.log("dataController1: ", dataController);
response.send(request.body);
}else{
response.send(" Error code: " + response.statusCode);
}
});
// updates the view - !! this is executed first
app.post('/sendToController', function(request, response) {
console.log("dataController2: ", dataController);
response.send(dataController);
});
};
Проблема в том, что обработка запроса занимает больше времени, поэтому сначала выполняется мой ответ, вызывающий sendToController, а затем getQueryJson. Любая идея, как я могу изменить способ их выполнения? или любая идея, если это возможно, я могу отправить ответ от /getQueryJson непосредственно на внешний контроллер без необходимости делать другой запрос на /sendToController?
Я только начал знакомиться со стеком MEAN, поэтому понимаю, что это может звучать как простой вопрос, но я действительно застрял.