graphQL一直有听说,但是工作忙总是没时间尝试,这次过年在家终于试了一把,感觉还是不错的。
人就是得有个目标,不然搞什么都没什么动力,这次自己给自己定的小目标就是把将博客的数据库数据架设一个GraphQL服务器,方便以后把博客搞成vue服务端渲染,以及后续的PWA等等
直接用wordpress的RESTful接口太难用,主要是请求标签和分类等信息的话会需要发很多的请求,感觉很不爽。
目前现在用的是express-graphql来实现的,创建schema则用的是GraphQLSchema来生成的
先记录下踩的坑吧
最开始尝试GraphQL是从这里开始的https://medium.com/@noringc/building-a-graphql-server-with-node-js-and-express-f8ea78e831f9

这里主要是用了node的mjs文件(这个也是首次尝试),里面有部分代码是缺失的,总体来说入门还是不错的,这个文章介绍了两个创建schema的方法,一个就是上面提到的GraphQLSchema,一个是用buildSchema,其中用buildSchema这个自己在实践中失败了,以后再尝试。
主要的问题是报错
Cannot use GraphQLSchema \"[object GraphQLSchema]\" from another module or realm
网上说的是graphql的版本的问题,通过指定版本可以解决,但是自己没有搞定,感觉graphql的版本是有点换,貌似有0.x.x和14.x.x。
当时也不知是在哪看到用这个

app.use(bodyParser.text({
  type: 'application/graphql'
}));

用了这个是不会报上面的错了,但是感觉它会一直接收不到参数,会一直报错
Must provide query string,但是自己一直有写啊
感觉它的问题就在于不该加上上面的

app.use(bodyParser.text({
  type: 'application/graphql'
}));

但是Cannot use GraphQLSchema \"[object GraphQLSchema]\" from another module or realm这个错误自己有没有搞定,这种类型的问题着实没搞过,再说自己感觉buildSchema里面传递一个字符串来创建schema很麻烦,就懒得在这个方向上折腾了,现在就一直在GraphQLSchema创建schema这条路上前行了,随着自己对graphql了解的深入,前面的问题肯定是要搞懂了。

写了简单的demo后,就要开始动真格的了,自己暂时把博客的mysql数据下载下来,自己node连接读取数据,还是很爽的。
参考网上的对wordpress结构有所了解了,wp_posts是存储文章的表这是简而易见的,主要是知道文章的分类和标签关系,以ID为2668的文章举例:

wp_term_relationships表

object_id term_taxonomy_id
2668 40
2668 606
2668 821
2668 902
2668 903

wp_term_taxonomy表

object_id term_taxonomy_id item_id
2668 40 39
2668 606 605
2668 821 820
2668 902 901
2668 903 902

wp_terms表

item_id name
39 资讯
605 苹果
820 apple
901 ibookstore
902 ibook

以上面的例子简单的说,根据文章ID2668找到40,根据40找到39,根据39找到对应的name资讯,分类、标签、友情链接等它们都会有个字段进行区分的。
先就写到这里吧。


发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据