比较两个 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 应用程序,它包含三个模型:UserTask,并用于跟踪我拥有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 中拥有完整的UserTask 对象。到目前为止,一切顺利。

现在我需要获取所有分配给特定UserTasks。我想我应该首先获得所有Tasks,然后是给定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 应用程序中返回它们的差异的主要内容,如果未能解决你的问题,请参考以下文章

从使用协程进行网络调用的服务内部发送广播

部署 MEAN Stack 应用程序,托管问题

React API 调用在开发中工作,在生产构建中失败

如何使用免费和公共的 Rapid API 并在 Flutter 应用程序中调用 API

用户未在 MEAN Stack 中获得授权?

Swoole系列4.3协程操作系统API