【问题标题】:NestJS mongoose return info from the databaseNestJS 猫鼬从数据库返回信息
【发布时间】:2022-11-22 02:50:27
【问题描述】:

因此,当我在 NestJS 服务中从 MongoDB 数据库获取信息时,我想将其返回给控制器并将其发送给客户端(Angular)

我尝试用 Promise 返回它,但我无法让它工作。

这是我尝试过的代码:

服务:

import { Injectable } from "@nestjs/common";
import { InjectModel } from "@nestjs/mongoose";
import mongoose, { Model } from "mongoose";
import {
  FriendRequest,
  FriendRequestDocument,
} from "../schema/friend-requests.schema";
import { Users, UsersDocument } from "../schema/user.schema";
import { FriendsDto } from "./dto/friends.dto";

@Injectable()
export class AddFriendService {
  constructor(
    @InjectModel(Users.name) private readonly usersModel: Model<UsersDocument>,
    @InjectModel("friendRequests")
    private readonly friendrequestModel: Model<FriendRequestDocument>
  ) {}

  async getRequests(userid: string) {
    
    
    let incomingrqs = new Promise((resolve, reject) => {
        let response = {
          incoming: [],
        };
        this.friendrequestModel
        .aggregate([
            {
              $lookup: {
                from: "users",
                localField: "author",
                foreignField: "_id",
                as: "userdata",
                // pipeline: [
                //   {
                //     $match: {
                //       friend_id: new mongoose.Types.ObjectId(userid)
                //     }
                //   }
                // ],
              },
            },
          ])
          .exec((err, data) => {
            if (err) {
              console.log(err);
            }
    
            if (!data) {
              console.log("No data returned");
            }
    
            data.forEach((rqsData) => {
              response.incoming.push({
                userid: rqsData.userdata[0]._id,
                username: rqsData.userdata[0].username,
                created_at: rqsData.userdata[0].created_at,
                pfp: "/assets/cdn/pfp/" + rqsData.userdata[0].pfp,
              });
            });
          });

          resolve(response);
      })

      incomingrqs.then(x => {
        return x;
      })
  }
}

控制器:

import { Get, Controller, Body, Post, Param } from "@nestjs/common";
import { AddFriendService } from "./friends.service";
import { FriendsDto } from "./dto/friends.dto";

@Controller("friends")
export class AddFriendController {
  constructor(private friendsService: AddFriendService) {}

  @Post("rqs")
  async getRqs(@Body() friendsDto: FriendsDto){

    let rqs = await this.friendsService.getRequests(friendsDto.userid);
    console.log(rqs)
    return rqs;
  }
}

交友申请文件:

import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import mongoose, { Document, ObjectId } from "mongoose";

export type FriendRequestDocument = FriendRequest & Document;

@Schema({collection: "friendRequests"})
export class FriendRequest {
  @Prop()
  author: mongoose.Types.ObjectId;

  @Prop()
  friend_id: mongoose.Types.ObjectId;

  @Prop()
  request_at: Date;
}

export const FriendRequestSchema = SchemaFactory.createForClass(FriendRequest);

你能帮助我吗?谢谢!

【问题讨论】:

    标签: database mongodb api mongoose nestjs


    【解决方案1】:

    aggregate.exec can already return a promise if no callback is given,仅供参考。

    您需要将 incomingrqs 返回给控制器。 This is standard of how promises work.。在then 内返回将返回转发到下一个promise,这就是为什么 incomingrqs 也需要 returned 的原因。否则,控制器将永远不知道服务返回了什么。

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 1970-01-01
      • 2019-01-20
      • 2021-08-11
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      相关资源
      最近更新 更多