[英]NESTJS - How to send an object with an array and an object
我遇到了 Nest 問題。 我想要的有點困難,我不知道該怎么做。 首先,使用站點的 ID,我從該站點檢索用戶,我希望能夠進行分頁、按順序排序(desc 或 asc,我不關心)並按值過濾結果(a細繩)。 在輸出中,我想制作一個包含結果和合成數組的對象。 例子 :
{
results : [{audit}],
syhthesis: {pageNumber: number, numberOfResults: number}
}
老實說,我已經嘗試了一段時間,但我就是不明白該怎么做。 這是我的實際代碼:
控制器:
import { Controller, Get, Query, Param, Post, Body } from '@nestjs/common';
import { UserAuditService } from './user-audit.service';
import { UserAudit } from 'src/entities/user-audit.entity';
@Controller('useraudit')
export class UserAuditController {
constructor(private readonly userAuditService : UserAuditService){};
@Post("/userpersite/{:id}")
async getUsers(@Body()id: string, @Query('page') page: number): Promise<UserAudit[]>{
return this.userAuditService.getAuditsForSite(id, page)
}
}
服務 :
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { UserAudit } from '../entities/user-audit.entity';
import { Repository } from 'typeorm';
@Injectable()
export class UserAuditService {
constructor(
@InjectRepository(UserAudit)
private readonly userAuditRepository : Repository<UserAudit>
){}
async getAuditsForSite(_siteId : string, page: number = 1) : Promise<UserAudit[]>{
return this.userAuditRepository
.find({
join : {
alias : "user-audit",
innerJoinAndSelect: {
user : "user-audit.who"
}
},
where : {
site : _siteId
},
take: 10,
skip: 10 * (page -1)
})
}
}
和實體:
import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from 'typeorm';
import { User } from './user.entity';
import { Site } from './site.entity';
@Entity('user-audit')
export class UserAudit {
@PrimaryGeneratedColumn()
id : string;
@ManyToOne(type => User, user => user.id)
who : User
@Column({ length : 100 })
action : string
@ManyToOne(type => Site, site => site.id)
site : Site
@Column({ type : 'date' })
date : Date
@Column({ length : 1000 })
before : string
@Column({ length : 1000 })
after : string
}
我在我的控制器中嘗試了很多東西,但是現在,我被卡住了,我知道我錯過了一些東西,也許很多東西,所以如果有人能幫助我,我將非常感激:)
在UserAuditService
您可以使用findAndCount
而不是find
。 它將返回一個包含 2 個元素的數組。 第一個元素是實體,第二個元素是總數。 然后需要制作相應的響應對象:
async getUsers(@Body()id: string, @Query('page') page: number): Promise<object>{
const [audits, total] = await this.userAuditService.getAuditsForSite(id, page)
return {
results : audits,
syhthesis: {
pageNumber: page,
numberOfResults: total,
}
}
抱歉又打擾你了。 所以我已經嘗試過了,但它不起作用:/我確定這是解決方案。 所以我想到了一些事情:使用模型,但同樣,我被卡住了。 這是新代碼:
服務 :
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { UserAudit } from '../entities/user-audit.entity';
import { Repository } from 'typeorm';
import { UserAuditRequest } from '../entities/user-audit-request';
@Injectable()
export class UserAuditService {
constructor(
@InjectRepository(UserAudit)
private readonly userAuditRepository : Repository<UserAudit>,
private readonly userRequest: Repository<UserAuditRequest>
){}
async getAuditsForSite(_siteId : string, page: number = 1, filter: any) : Promise<any>{
const joinAndSort = this.userAuditRepository
.findAndCount({
join : {
alias : "user-audit",
innerJoinAndSelect: {
user : "user-audit.who"
}
},
where : {
site : _siteId
},
take: 10,
skip: 10 * (page -1)
})
joinAndSort
const sortElement = this.userRequest.find({
where: {
pagination: page
}
})
sortElement
const filterElement = this.userRequest.findAndCount({
where: {
filter: filter
}
})
filterElement
}
}
控制器:
import { Controller, Get, Query, Param, Post, Body } from '@nestjs/common';
import { UserAuditService } from './user-audit.service';
import { UserAudit } from 'src/entities/user-audit.entity';
import { UserAuditRequest } from '../entities/user-audit-request';
import { ResultUserAudit } from '../entities/result-user-audit';
import { Any } from 'typeorm';
@Controller('useraudit')
export class UserAuditController {
constructor(private readonly userAuditService : UserAuditService, private readonly resultUserAudit: ResultUserAudit){};
@Post("/userpersite/:id")
async postUserPerSite(@Param()id: string,@Body() request : UserAuditRequest): Promise<ResultUserAudit>{
return await this.userAuditService.getAuditsForSite(id, request.pagination.pageNumber, request.filter);
請求模型:
import { Injectable } from "@nestjs/common";
@Injectable()
export class UserAuditRequest {
constructor(){}
pagination: {
resultNumber: number;
pageNumber: number;
}
sort: {
columnSorted: any;
orderBy: any;
}
filter: {
columnFilter: any;
filtervalue: string;
}
}
和結果模型:
import { Injectable } from "@nestjs/common";
import { UserAudit } from "./user-audit.entity";
@Injectable()
export class ResultUserAudit {
constructor(private userAudit: UserAudit){}
result: UserAudit[];
synthesis: {
pageNumber: number,
resultNumber: number;
}
}
我正在嘗試獲取我的代碼的邏輯,但我不知道,我就是無法成功:( 我在我的第一篇文章中看到了我想要做的解釋(希望如此),但我做不到.希望有人能幫忙解釋一下。謝謝:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.