比较两个 API 调用的结果并在 MEAN 应用程序中返回它们的差异
Posted
技术标签:
【中文标题】比较两个 API 调用的结果并在 MEAN 应用程序中返回它们的差异【英文标题】:Comparing results from two API calls and returning their difference in MEAN app 【发布时间】:2018-12-27 05:41:53 【问题描述】:编辑:由于找不到正确的解决方案,我更改了 应用程序的结构有点,并发布了另一个问题: Mongoose - find documents not in a list
我有一个 MEAN 应用程序,它包含三个模型:User
、Task
,并用于跟踪我拥有UserTask
的用户分配了哪个任务,如下所示:
const mongoose = require("mongoose");
const autopopulate = require("mongoose-autopopulate");
const UserTaskSchema = mongoose.Schema(
completed: type: Boolean, default: false ,
userId:
type: mongoose.Schema.Types.ObjectId,
ref: "User",
autopopulate: true
,
taskId:
type: mongoose.Schema.Types.ObjectId,
ref: "Task",
autopopulate: true
);
UserTaskSchema.plugin(autopopulate);
module.exports = mongoose.model("UserTask", UserTaskSchema);
在我的前端应用程序中,我有 AngularJS 服务,并且我已经具有获取所有用户、所有任务和分配给特定用户的任务的功能(通过获取所有 UserTasks
和给定的userId
。例如:
// user-task.service.js
function getAllUserTasksForUser(userId)
return $http
.get("http://localhost:3333/userTasks/byUserId/" + userId)
.then(function(response)
return response.data;
);
// task-service.js
function getAllTasks()
return $http.get("http://localhost:3333/tasks").then(function(response)
return response.data;
);
然后我在我的控制器中使用这些数据,如下所示:
userTaskService
.getAllUserTasksForUser($routeParams.id)
.then(data => (vm.userTasks = data));
...由于autopopulate
插件,我在UserTasks
中拥有完整的User
和Task
对象。到目前为止,一切顺利。
现在我需要获取所有未分配给特定User
的Task
s。我想我应该首先获得所有Task
s,然后是给定userId
的所有UserTasks
,然后使用一些“where-not-in”类型的过滤器做出某种改变。
对于所有 MEAN 组件,我仍然是新手,我不熟悉所有那些 then()
s 和承诺等东西......而且我真的不知道该怎么做。我尝试使用多个then()
s 但没有成功。谁能给个提示?
【问题讨论】:
【参考方案1】:您可以在服务器/API 端做这将更有效。
在客户端,如果您想这样做,请在下面尝试
var userid = $routeParams.id;
userTaskService
.getAllTasks()
.then((data) =>
vm.userTasks = data.filter(task => task.userId !== userid)
);
【讨论】:
我会试试这个,谢谢。只是出于好奇,您能否编辑您的答案并告诉我如何在服务器端执行此操作? 编辑:实际上,这个解决方案是行不通的。在这里,您将获得 UserTasks,它仅代表已分配给某个用户的任务。如果有未分配的任务,则不会有任何具有相应taskId的UserTask条目... 编辑 2:只是一个解释。假设有用户 A、B、C 和任务 1、2、3、4、5。如果用户 A 被分配到任务 1 和 2,而用户 B 被分配到任务 2 和 3,那么我将有以下用户任务:A,1、A,2、B,2、B,3。根据您最初的回答,对于用户 B,我会取回任务 1 和 2,因为这些是未分配用户 B 的用户任务条目。而我真正需要的是任务 1、4 和 5。以上是关于比较两个 API 调用的结果并在 MEAN 应用程序中返回它们的差异的主要内容,如果未能解决你的问题,请参考以下文章