小编Vik*_*ikk的帖子

apollostack/graphql-server - 如何从解析器中获取查询中请求的字段

我试图找出一种干净的方式来处理查询和mongdb投影,所以我不必从数据库中检索过多的信息.假设我有:

// the query
type Query {
  getUserByEmail(email: String!): User
}
Run Code Online (Sandbox Code Playgroud)

我有一个Useremailusername,让事情变得简单.如果我发送查询而我只想检索电子邮件,我可以执行以下操作:

query { getUserByEmail(email: "test@test.com") { email } }
Run Code Online (Sandbox Code Playgroud)

但在解析器,我的数据库查询检索依然既usernameemail,但只有其中的一个是由阿波罗服务器查询结果传回.

我只希望数据库检索查询要求的内容:

// the resolver
getUserByEmail(root, args, context, info) {
  // check what fields the query requested
  // create a projection to only request those fields
  return db.collection('users').findOne({ email: args.email }, { /* projection */ });
}
Run Code Online (Sandbox Code Playgroud)

当然问题是,获取客户端请求的信息并不是那么简单.

假设我将请求作为上下文传递 - 我考虑使用context.payload(hapi.js),它具有查询字符串,并通过各种.split()s 搜索它,但这感觉有点脏.据我所知,info.fieldASTs[0].selectionSet.selections有字段列表,我可以检查它是否存在.我不确定这是多么可靠.特别是当我开始使用更复杂的查询时.

有更简单的方法吗?

如果您不使用mongDB,则投影是您传递的另一个参数,告诉它明确要检索的内容: …

mongodb hapijs graphql apollo-server

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

所有外部js和css文件上的Gulp和Browser-sync 404

所以我是gulp的新手并且一直在关注文档.到目前为止,一切都运行良好,直到我进入浏览器同步.如果我跑了一口气,一切都会转移到需要去的地方.浏览器在端口3000上加载index.html文件.没有加载任何css或js.在控制台中,我得到了"无法加载资源"404错误,除了图像和cdn文件之外,还有src或href属性.我所拥有的大多数浏览器同步内容都直接来自http://www.browsersync.io/docs/gulp/.这是我的gulpfile:

///////////////////////////////////////
// Required
///////////////////////////////////////
var gulp = require('gulp'),
    uglify = require('gulp-uglify'),
    minifyCss = require('gulp-minify-css'),
    rename = require('gulp-rename'),
    concat = require('gulp-concat'),
    plumber = require('gulp-plumber'),
    browserSync = require('browser-sync'),
    reload = browserSync.reload,
    sourcemaps = require('gulp-sourcemaps'),
    sass = require('gulp-sass');

///////////////////////////////////////
// Required
///////////////////////////////////////
gulp.task('userJs', function () {
    return gulp.src('js/*.js')
        .pipe(plumber())
        .pipe(sourcemaps.init())
        .pipe(uglify())
        .pipe(concat('app.js'))
        .pipe(sourcemaps.write())
        .pipe(gulp.dest('dist/js'))
        .pipe(browserSync.stream());
});

gulp.task('libJs', function () {
    return gulp.src('js/libs/*.js')
        .pipe(gulp.dest('dist/js/libs'))
        .pipe(reload({stream:true}));
});    

gulp.task('sass', function () {
    return gulp.src('scss/*.scss')
        .pipe(plumber())
        .pipe(sourcemaps.init())
        .pipe(sass())
        .pipe(minifyCss())
        .pipe(concat('app.css'))
        .pipe(sourcemaps.write())
        .pipe(gulp.dest('dist/css'))
        .pipe(browserSync.stream());
}); …
Run Code Online (Sandbox Code Playgroud)

javascript gulp browser-sync

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