我有以下型号:
User, Customer,Comment
用户可以评论一个Customer,用户可以回复另一个用户的评论,递归无限。
我已经这样做了,但它仅限于一个回复,我想得到所有回复嵌套:
public async getCommentsForCustomerId(customerId: string): Promise<CustomerComment[]> {
return this.find({where: {customer: {id: customerId}, parentComment: null}, relations: ['childComments']});
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到的响应仅嵌套在一个级别上:
[
{
"id": "7b5b654a-efb0-4afa-82ee-c00c38725072",
"content": "test",
"created_at": "2019-12-03T15:14:48.000Z",
"updated_at": "2019-12-03T15:14:49.000Z",
"childComments": [
{
"id": "7b5b654a-efb0-4afa-82ee-c00c38725073",
"content": "test reply",
"created_at": "2019-12-03T15:14:48.000Z",
"updated_at": "2019-12-03T15:14:49.000Z",
"parentCommentId": "7b5b654a-efb0-4afa-82ee-c00c38725072"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
如何进行查询以将它们全部嵌套在 typeorm 中?
实体定义(注意客户重命名为 Lead):
@Entity('leads_comments')
export class LeadComment {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne(type => LeadComment, comment => comment.childComments, {nullable: true})
parentComment: LeadComment; …Run Code Online (Sandbox Code Playgroud) 我试图在不破坏 DI 层的情况下创建一个新实例,从而允许我的实例访问其构造函数中使用的所有可注入服务
我目前拥有的示例不允许我使用任何可注入服务:
const camera: Camera = new Camera(id, options);
Run Code Online (Sandbox Code Playgroud)
使用这种方法,相机类无法导入任何可注入的单例或类。
我在这里读到您可以使用它moduleRef来创建新实例,因此我尝试了以下操作:
const camera: Camera = await this.moduleRef.create(Camera);
Run Code Online (Sandbox Code Playgroud)
但现在的问题是,我无法传递ID和Options参数,唯一的解决方案是在初始化后立即使用设置器。
问题:
如何创建一个类的新实例(不是单例),由 Nest 的注入器创建并在最新版本的 NestJS 中创建时传递自定义参数?
我有一个使用LibGDX引擎创建的2D游戏.该游戏是为桌面创建的.
还为游戏开发了一个服务器.
我使用Netty.io网络库在服务器和客户端之间进行通信.
一切正常,但我想让没有安装Java的用户玩,我找到的解决方案是使用LibGDX提供的HTML5跑步者.
但是,如果我将其转换为HTML5,我必须使用websockets重新为HTML5客户端做网络部分,并在服务器中添加对websocket连接的支持,这是正确的吗?
还有其他解决方案吗?
我有一个将在几个实例上运行的游戏服务器。
世界1,世界2,世界3
每个世界都是一台运行在不同IP地址上的服务器。
列出了游戏应具备的功能:
我可以想到两种方法来做到这一点:
方法1-登录服务器TCP / IP
创建一个中间人服务器。当客户端连接到世界时,该世界服务器将发送登录请求数据包以输入所输入的用户凭据,并且登录服务器将检查数据库并响应身份验证结果,如果成功,则将在世界。
Login Server将始终使用在线玩家列表,每个玩家的状态,他所处的世界等等来更新所有世界。

方法2
与方法1相同,但代替登录服务器,使用HTTP API服务器,并使用Redis服务器通过事件相互更新。我为什么认为这更好?因为将Web应用程序集成到游戏中会更容易,所以允许用户通过Web应用程序进行连接和彼此聊天。
为了在方法1中做到这一点,您需要向TCP / IP登录服务器添加新的隧道以支持WebSocket连接。
对不起,图纸不好。
方法2是否可行?您认为哪种方法更好?如果还有其他方法可以考虑?
我有用于上传文件的中间件。
@Injectable()
export class FilesMiddleware implements NestMiddleware {
private storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, path.join(__dirname, '../../uploads/'));
},
filename: (req, file, cb) => {
let extArray = file.mimetype.split("/");
let extension = extArray[extArray.length - 1];
cb(null, file.fieldname + '-' + Date.now() + '.' + extension)
}
});
resolve(...args: any[]): MiddlewareFunction {
return (req, res, next) => {
console.log(req.files);
const upload = multer({storage: this.storage});
upload.any();
return next();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的请求中,当我使用req.files它时,它会给我原始文件名而不是新文件名(带有日期等,如我在multer存储选项中设置的一样)。
有什么办法可以使新的文件名multer随中间件一起上传?
@Post('upload')
@UseInterceptors(FilesInterceptor('files[]', 20, {})) …Run Code Online (Sandbox Code Playgroud) 看看我制作的这个简单的JsFiddle,它可以动画进入列表的新项目.
但是,动画仅影响第一行,而不影响所有行.我使颜色随机,所以当插入新项目时,您实际上可以看到其他行上的"跳跃".
有没有办法让它只用CSS影响所有行?
@keyframes enter {
0% {
transform: translateX(-100%);
margin-left: calc(var(--w) * -1);
}
100% {
transform: translateX(0px);
margin-left: 0
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的动画,这是我的列表项:
.slidepush li {
--w: 50px;
width: var(--w);
height: 50px;
background-color: red;
vertical-align: top;
border: 0;
padding: 0;
margin: 0;
display: inline-block;
}
.enter {
animation: enter 1s;
}
Run Code Online (Sandbox Code Playgroud)
Ceated一个管理ul和实现add的简单类:
class SlidePush {
constructor(ulElement) {
this.element = ulElement;
}
add(item) {
this.element.prepend(item.addClass('enter'));
}
}
const sp = new SlidePush($(".slidepush"));
setInterval(() => {//
var colors = …Run Code Online (Sandbox Code Playgroud) 给定以下关系:
@Entity({name: 'accounts'})
export class Account {
@PrimaryGeneratedColumn('uuid')
id: string;
@OneToOne(type => Address, address => address.id)
@JoinColumn({name: 'address_id'})
address: Address;
@Column()
name: string;
}
Run Code Online (Sandbox Code Playgroud)
以及地址关系:
@Entity({name: 'addresses'})
export class Address {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({length: 45})
country: string;
}
Run Code Online (Sandbox Code Playgroud)
当我account通过以下方式获取实体时:
/**
* Gets account by haccount ID with ALL relations
* @param accountId The account ID
*/
public async getAccountByAccountIdWithRelations(accountId: string): Promise<Account> {
return await this.findOneOrFail({id: accountId}, {relations: ['address']});
}
Run Code Online (Sandbox Code Playgroud)
我得到了包含其中关系的完整Account实体。Address
然后当我执行以下操作时:
account.address.country = 'newcountry'; …Run Code Online (Sandbox Code Playgroud) 为了描述我的问题,我将从根源开始解释我想要做什么,以及为什么我决定为此使用 Grid Box,让我们从两个线框开始:
我的布局是由两个容器组成的;身体和侧边栏。不要认为这是整个网站,这只是一个组件。
侧边栏包含两个元素,便笺和聊天。
笔记和聊天元素可以是微型的,但是一旦它是微型的,左侧主体容器的第二部分将变宽并取代侧边栏过去在其底部空间占据的位置,如下例所示:
因此,经过一番研究后,除了为需要变宽的第二个数据部分提供 2 个不同的组件或仅使用网格框之外,我找不到任何其他解决方案,但是,我必须为侧栏和第二部分设置动画具有宽度变化的过渡的数据。
我使用 Grid Box 创建了一个有角度的 POC 示例,以实现我在没有动画的情况下所需的功能:
https://stackblitz.com/edit/angular-ivy-7tucsx?file=src/app/app.component.html
是否可以通过在示例 POC中将.closed类添加到 my .containerlike来使用网格框实现此动画?
我正在使用 FFMPEG 和 nodejs 流Duplex类从相机创建视频流。
this.ffmpegProcess = spawn('"ffmpeg"', [
'-i', '-',
'-loglevel', 'info',
/**
* MJPEG Stream
*/
'-map', '0:v',
'-c:v', 'mjpeg',
'-thread_type', 'frame', // suggested for performance on StackOverflow.
'-q:v', '20', // force quality of image. 2-31 when 2=best, 31=worst
'-r', '25', // force framerate
'-f', 'mjpeg',
`-`,
], {
shell: true,
detached: false,
});
Run Code Online (Sandbox Code Playgroud)
在本地网络上,我们正在使用几台计算机对其进行测试,并且每件事都非常稳定,延迟最长为 2 秒。
但是,我们已将该服务导入到 AWS 生产中,当我们连接第一台计算机时,我们有大约 2 秒的延迟,但是如果另一个客户端连接到流,它们都开始延迟很多,延迟增加到 10+秒,此外视频非常慢,就像帧之间的运动一样。
现在我问 TCP 或 UDP 是因为我们使用 TCP 作为流,这意味着发送的每个数据包都在实现 TCP syn-ack-synack 协议和序列。
我的问题是,TCP 真的会导致延迟高达 10 …