express.js graphql express-graphql
创建应用
const l = console.log;
var express = require("express");
var graphqlHTTP = require("express-graphql");
var { buildSchema } = require("graphql");
const cats = [{ id: 1, name: "a" }, { id: 2, name: "b" }, { id: 3, name: "c" }];
var schema = buildSchema(`
type Query {
hello: String
cats: [Cat]
findCat(id: ID!): Cat
}
type Cat {
id: Int
name: String
}
`);
// root 提供所有 API 入口端点相应的解析器函数
var root = {
hello: () => "Hello world 233!",
cats: () => cats,
findCat({id}) {
return cats.find(el => el.id === Number(id));
}
};
var app = express();
// 根节点
app.use(
"/graphql",
graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true
})
);
app.listen(4000);
基本类型 String、Int、Float、Boolean 和 ID , String! 表示非空字符串,[Int] 表示一个整数列表
查询
http://localhost:4000/graphql?query={ cats { id name } } // [Cat]
http://localhost:4000/graphql?query={ findCat(id: 2){ name } } // Cat.name
http://localhost:4000/graphql?query={ hello } // Hello world 233!
http://localhost:4000/graphql?query={ findCat(id: 2) {name} hello } // data:{ findCat:{ "name": "b" }, hello: "Hello world 233!" }
let r = await axios.post("http://localhost:4000/graphql", {query: `{ findCat(id: ${id}) { name } hello}`}); // axios
增加数据 和 更新数据
type Mutation {
createCat(cat: CreateCat): [Cat]
updateCat(id: ID!, name: String!): [Cat]
}
type Cat {
id: Int
name: String
}
input CreateCat {
name: String!
}
var root = {
createCat({ cat }) {
cats.push({ id: cats.length + 1, name: cat.name });
return cats;
},
updateCat({ id, name }) {
cats.find(el => el.id == id).name = name;
return cats;
}
};
mutation {
updateCat(id: 2, name: "new name") {
name id
}
}
mutation {
createCat(cat:{name: "ajanuw"}) {
name id
}
}
// axios 实现 createCat
const query = `mutation createCat($cat: CreateCat) {
createCat(cat: $cat) {
name
}
}`;
async function main() {
let r = await axios.post("http://localhost:4000/graphql", {
query,
variables: {
cat: {
name: 'hello'
}
}
});
l(r.data.data.createCat);
}
// updateCat
const query = `mutation updateCat($id: ID!, $name: String!) {
updateCat(id: $id, name: $name) {
name
}
}`;
async function main() {
let r = await axios.post("http://localhost:4000/graphql", {
query,
variables: {
id: 2,
name: '233'
}
});
l(r.data.data.updateCat);
}
获取req 对象
var schema = buildSchema(`
type Query {
ip(msg: String): String
}
`);
var root = {
ip(args, req) {
l(args);
return req.ip;
}
};
query={ ip(msg: "233") }
express.js graphql express-graphql的更多相关文章
- 《Pro Express.js》学习笔记——概述
要学Node.js,先学Express.js. Express.js是Node.js官方推荐的基础框架. Express.js框架经过一系列的发展,已经到了4.x版本.新的版本解决了3.x之前版本的依 ...
- 透析Express.js
前言 最近,本屌在试用Node.js,在寻找靠谱web框架时发现了Express.js.Express.js在Node.js社区中是比较出名web框架,而它的定位是“minimal and flexi ...
- Node.js、Express、Socket.io 入门
前言 周末断断续续的写了第一个socket.io Demo.初次接触socket.io是从其官网看到的,看着get started做了一遍,根据官网的Demo能提供简单的服务端和客户端通讯. 这个De ...
- Node.js、express、mongodb 实现分页查询、条件搜索
前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...
- Node.js、express、mongodb 入门(基于easyui datagrid增删改查)
前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...
- 《Pro Express.js》学习笔记——Express服务启动常规七步
Express服务启动常规七步 1. 引用模块 var express=require('express'), compression=require('compression'), bo ...
- 在 node.js 的 express web 框架中自动注册路由
该方法主要是动态注册自己写的 router . 注册器 router 文件名为 loader.js . var express = require('express'); var fs = requ ...
- Node.js的高性能封装 Express.js
Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用.Express 不对 node.js 已有的特性进行二次抽象,我们只是在它之上扩展了W ...
- node.js和express.js安装和使用步骤 [windows]
PS: NODEJS:https://nodejs.org NPM:https://www.npmjs.com/ 一.node.js安装与配置 到https://nodejs.org/en/downl ...
- node.js入门及express.js框架
node.js介绍 javascript原本只是用来处理前端,Node使得javascript编写服务端程序成为可能.于是前端开发者也可以借此轻松进入后端开发领域.Node是基于Google的V8引擎 ...
随机推荐
- python测试开发django-53.xadmin里Model分类管理(proxy=True)
前言 django的xadmin后台使用xadmin.site.register注册时,一张表只能注册一次,在后面页面上只能显示出一个页面. 有时候我们想从里面筛选出自己想要的数据,比如有全部的学生成 ...
- too much recursion(太多递归)Uncaught RangeError: Maximum call stack size exceeded BootstrapValidator报错
在BootstrapValidator中已默认遵守Bootstrap规则,form里的每个输入项目必需包含在类为form-group的标签里,否则BootstrapValidator中定义的field ...
- 【JavaScript从入门到精通】第二课 初探JavaScript魅力-02
第二课 初探JavaScript魅力-02 变量 说起变量,我们不得不提起我们有一部比较古老的电视剧叫<包青天>.包青天有一把非常厉害的宝剑叫“尚方宝剑”,见到尚方宝剑有如见到皇帝.某种程 ...
- git变慢的原因
最近使用git更新代码变慢,进一步试了一下提交代码.执行git命令都很慢,换了idea的工作目录.更换git版本,所有操作都是徒劳. 最后关了火绒杀毒软件,才快了起来. 坑坑坑坑坑的火绒杀毒!浪费我至 ...
- 同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别
POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...
- Down Payment 和 Deposit的差异
If you’re like most homeowners, purchasing a home represents the single biggest financial transactio ...
- LNMP环境的搭建(yum)方法(精)
第一 先安装nginx nginx在官方CentOS社区yum里面没有,需要在nginx的官方网站去下载yum的配置文件 官方:https://www.nginx.com/resources/wiki ...
- mysql update ...select的使用 & update 遇到 disable safe 的解决方法
use `testdb`; update dtable d INNER JOIN new_table n ON d.details = n.details set d.email = n.email, ...
- Linux下源码安装xz的方法
xz是一个不太常见但又效率非常高的解压缩软件,安装方法如下 ,cd /usr/local/src ,wget https://tukaani.org/xz/xz-5.2.3.tar.gz //下载到/ ...
- 每天学习一个命令:find 查找文件
查找的动作在平时使用的频率也还是很高的,所以知道并用好 find 这个命令也很重要.find 命令顾名思义,就是搜索特定文件夹内的文件. 基本使用 最基本的使用 find [path] [expres ...