goal
🕐 graphql搭建服务端
🕑 graphql连接mongoDB
🕒多个/复杂参数的传递
🕐 graphql搭建服务端
1️⃣在搭建服务端之前先回顾下schema
、Query
和 Mutation
:
-
Schema
type Test{ name:String, title:String, pass:String, id:ID } type Query { getTest: [Test] } type Mutation{ createTest(name:String):Test }
-
Query(查询)
//查询 Query { getTest() : [Test] // 返回一个Test类型的集合 }
在这可以回想下
rest
中的使用哦😄😄😄 -
Mutation (更改)
//解析createTest Mutation:{ createTest(root,args){ //args为传递的参数 return args } }
以上便是一些基础知识,下面开始搭建服务端 ⬇️⬇️⬇️
2️⃣搭建服务端
-
借助express搭建的服务平台
-
安装依赖:
npm install apollo-server-express express graphql
-
说明:
Apollo Server
是一款构建在 Node.js 基础上的 GraphQL 服务中间件,使用时最基本的就是要理解清楚schema
和resolvers
。 -
app.js文件中引入
var {ApolloServer} = require('apollo-server-express'); const typeDefs = require('./graphql/schema'); //定义相关type的文件 const resolvers = require('./graphql/resolver'); //定义解析相关方法的文件(增删改查方法) const server = new ApolloServer({typeDefs,resolvers}); server.applyMiddleware({app}); app.listen(() => console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`) );
-
浏览器中访问:
http://localhost:4000/graphql
即可打开graphql中如下图所示的编辑工具playground
。 -
简单案例
- resolver中
//以查询为例 getTest(){ return[{ "name":"anna", "title":"前端", "pass":"123" }] }
- playground效果
- resolver中
🕑 graphql连接mongoDB
- 说白了就是express连接mongoDB,同样在app.js中引入下面代码:
// 连接本地数据库 const urlDev = "mongodb://localhost:27017/data" mongoose.connect(urlDev, { useNewUrlParser: true }) mongoose.connection.on('connected', function () { console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`); }) mongoose.connection.on('error', function () { console.log('出错了'); }) mongoose.connection.on('disconnected', function () { console.log('连接断开'); })
- 简单案例
//以增加数据为例 createTest(root,args){ test.findOne({name:args.name}).then((data)=>{ //test为引入定义集合的model名 if(!data){ test.insertMany(args); }else{ console.log("该数据已存在!"); } }) return args; }
🕒多个/复杂参数的传递
上面在mutation中提到传参,若传递单个参数的话直接传递即可,若想传递多个参数又该如何写呢?我们一起来瞅瞅: