小编tec*_*rek的帖子

处理GraphQL中的Mongoose填充字段

如何表示可以是简单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_devicelinked_device对应于简单时,字段下面没有字段ObjectId. …

mongoose mongodb node.js graphql graphql-js

5
推荐指数
2
解决办法
2578
查看次数

如何处理 GraphQL Schema 定义中的连字符

我的猫鼬模式如下

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 论坛上搜索过这个,但找不到类似的问题)

mongoose mongodb mongoose-schema graphql graphql-js

2
推荐指数
1
解决办法
3413
查看次数

是否可以在Observable订阅方法中包含逻辑?

我正在观看@ 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)

observable rxjs apollo-client angular

1
推荐指数
1
解决办法
760
查看次数