如何表示可以是简单ObjectId
字符串或填充对象实体的字段?
我有一个表示'设备类型'的Mongoose Schema,如下所示
// assetSchema.js
import * as mongoose from 'mongoose'
const Schema = mongoose.Schema;
var Asset = new Schema({ name : String,
linked_device: { type: Schema.Types.ObjectId,
ref: 'Asset'})
export AssetSchema = mongoose.model('Asset', Asset);
Run Code Online (Sandbox Code Playgroud)
我试图将其建模为GraphQLObjectType,但我很难理解如何允许linked_ue
字段采用两种类型的值,一种是一种ObjectId
,另一种是完整的Asset
对象(当它被填充时)
// graphql-asset-type.js
import { GraphQLObjectType, GraphQLString } from 'graphql'
export var GQAssetType = new GraphQLObjectType({
name: 'Asset',
fields: () => ({
name: GraphQLString,
linked_device: ____________ // stumped by this
});
Run Code Online (Sandbox Code Playgroud)
我已经研究了联盟类型,但问题是联盟类型期望字段被规定为其定义的一部分,而在上述情况下,linked_device
当linked_device
对应于简单时,字段下面没有字段ObjectId
. …
我的猫鼬模式如下
var ImageFormats = new Schema({
svg : String,
png-xlarge : String,
png-small : String
});
Run Code Online (Sandbox Code Playgroud)
当我将其翻译成 GraphQL 模式时,这就是我尝试的
export var GQImageFormatsType: ObjectType = new ObjectType({
name: 'ImageFormats',
fields: {
svg : { type: GraphQLString },
'png-xlarge': { type: GraphQLString },
'png-small' : { type: GraphQLString }
}
});
Run Code Online (Sandbox Code Playgroud)
GraphQL 返回以下错误: Error: Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "png-xlarge" does not.
如果我尝试在 Mongoose 模型之后对 GraphQL 进行建模,我该如何协调这些字段?有没有办法让我创建别名?
(我在 graffiti 和 stackoverflow 论坛上搜索过这个,但找不到类似的问题)
我正在观看@ john_lindquist关于RxJS的egghead教程,并且他强调了不包括业务逻辑而不是.subscribe()
方法的观点.
因此,我正在创建一个canActivate防护,以防止用户进入无效路由,我不得不在订阅方法中构建逻辑.有一个更好的方法吗?
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, Router } from '@angular/router';
import { Subscription } from 'rxjs/Subscription';
import { Subject } from 'rxjs/Subject';
import { Apollo, ApolloQueryObservable } from 'apollo-angular';
import { GQTicketId } from './ticket.model';
@Injectable()
export class TicketRouteActivatorService implements CanActivate {
public ticket;
private returnTrue: Subject<Boolean> = new Subject<Boolean>();
private ticketSubscription: Subscription;
constructor(private apollo: Apollo,
private router: Router) { }
canActivate(route: ActivatedRouteSnapshot ) {
this.ticketSubscription = this.apollo.watchQuery({
query: GQTicketId,
variables: …
Run Code Online (Sandbox Code Playgroud)