2016-11-24 14 views
5

Tôi cần một khách hàng graphql lib để chạy trên node.js đối với một số thử nghiệm và một số dữ liệu kết hợp - không phải trong khả năng sản xuất. Tôi đang sử dụng apollo ở mọi nơi khác (react-apollo, apollo's graphql-server-express). Nhu cầu của tôi khá đơn giản.Trình apollo-client có hoạt động trên node.js không?

Có phải apollo-client là lựa chọn khả thi không? Tôi không thể tìm thấy ví dụ hoặc tài liệu về việc sử dụng nó trên nút - nếu bạn biết bất kỳ điều gì, vui lòng chia sẻ.

Hoặc có lẽ tôi nên/có thể sử dụng trình khách tham chiếu graphql trên nút?

+1

Ứng dụng khách được thiết kế để chạy trong trình duyệt. Với các công cụ graphql và graphql-server-express (máy chủ apollo trước đây), bạn có thể thực hiện hầu hết mọi thứ. – Hosar

+0

Vì vậy, nếu tôi muốn máy chủ tạo các truy vấn graphql cho một số máy chủ khác thì sao? Sau đó, tôi cần một thư viện client graphql chạy trên máy chủ, có? – Josh

+0

Đây là 8 tháng trước ... nếu bạn có bất kỳ thông tin chi tiết nào từ khi bạn có thể chia sẻ? – YakirNa

Trả lời

2

Dưới đây là triển khai nút js đơn giản.

khách hàng 'graphiql' đủ tốt cho hoạt động phát triển.

1. run npm install 
2. start server with "node server.js" 
3. hit "http://localhost:8080/graphiql" for graphiql client 

server.js

var graphql = require ('graphql').graphql 
var express = require('express') 
var graphQLHTTP = require('express-graphql') 

var Schema = require('./schema') 

// This is just an internal test 
var query = 'query{starwar{name, gender,gender}}' 
graphql(Schema, query).then(function(result) { 
    console.log(JSON.stringify(result,null," ")); 
}); 

var app = express() 
    .use('/', graphQLHTTP({ schema: Schema, pretty: true, graphiql: true })) 
    .listen(8080, function (err) { 
    console.log('GraphQL Server is now running on localhost:8080'); 
    }); 

schema.js

//schema.js 
var graphql = require ('graphql'); 
var http = require('http'); 

var StarWar = [ 
    { 
    "name": "default", 
    "gender": "default", 
    "mass": "default" 
    } 
]; 

var TodoType = new graphql.GraphQLObjectType({ 
    name: 'starwar', 
    fields: function() { 
    return { 
     name: { 
     type: graphql.GraphQLString 
     }, 
     gender: { 
     type: graphql.GraphQLString 
     }, 
     mass: { 
     type: graphql.GraphQLString 
     } 
    } 
    } 
}); 



var QueryType = new graphql.GraphQLObjectType({ 
    name: 'Query', 
    fields: function() { 
    return { 
     starwar: { 
     type: new graphql.GraphQLList(TodoType), 
     resolve: function() { 
      return new Promise(function (resolve, reject) { 
      var request = http.get({ 
       hostname: 'swapi.co', 
       path: '/api/people/1/', 
       method: 'GET' 
      }, function(res){ 
        res.setEncoding('utf8'); 
        res.on('data', function(response){ 
        StarWar = [JSON.parse(response)]; 
        resolve(StarWar) 

        console.log('On response success:' , StarWar); 
       }); 
      }); 

      request.on('error', function(response){ 
        console.log('On error' , response.message); 
       }); 

      request.end();      
      }); 
     } 
     } 
    } 
    } 
}); 

module.exports = new graphql.GraphQLSchema({ 
    query: QueryType 
}); 
1

Để đối phó với @YakirNa 's bình luận:

tôi không thể nói chuyện với những nhu cầu khác tôi được mô tả, nhưng tôi đã thực hiện một số lượng kiểm tra hợp lý. Tôi đã làm tất cả các thử nghiệm của tôi trong quá trình.

Hầu hết thử nghiệm kết thúc là thử nghiệm trình phân giải, mà tôi thực hiện thông qua một lệnh gọi hàm graphql của thư viện graphql bằng truy vấn thử nghiệm và sau đó xác thực phản hồi.

Tôi cũng có một lớp thử nghiệm đầu cuối (gần như) để hoạt động ở cấp độ xử lý nhanh của http. Nó tạo ra một yêu cầu HTTP giả mạo và xác minh phản hồi trong quá trình. Đây là tất cả trong quá trình máy chủ; không có gì đi qua dây. Tôi sử dụng điều này một cách nhẹ nhàng, chủ yếu để kiểm tra xác thực JWT và hành vi cấp yêu cầu khác độc lập với thân yêu cầu graphql.

Các vấn đề liên quan