EXpress
有了node.js 的基础,可以简单上手express,express是一个简洁而灵活的node.js的web应用框架,其核心特性如下:
- 可以设置多个中间件来响应http请求,处理接口
- 定义了路由表用于执行不同的HTTP请求动作
- 可以通过向模板传递参数来动态渲染HTML页面
- 支持服务端渲染和客户端渲染
需要有node.js的基础,了解中间件、静态资源配置等和核心概念。
GraphQL
GraphQL是一种数据库查询语言,是rest API的替代品。
既是一种用于API的查询语言也是一个满足查询数据的运行时,GraphQL对API的数据提供了一套基于理解的完整描述,使得客户端能够准确获取它需要的数据,而且没有任何冗余,也让API更容易的随着时间的推移而演进。
特点:
- 获取多个资源,只使用一个请求
- 描述所有类似的系统,便于维护,根据需求平滑推进,添加或者隐藏字段
与Restful接口区别:
- restful一个接口只能返回一个资源,而GraphQL可以一次性获取多个资源
- restful用不同的url来区分资源,而FraphQL使用类型来进行区分资源
类型:
- Query : 查询
- Mutation: 操作/修改
MongoDB
MongoD是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系型数据库中最像关系型数据库的,支持的数据结构非常松散,是类似于json的bson格式,因此可以存储比较复杂的数据类型,Mongo最大的特点是它支持的查询语言非常强大,其语法类似于面向对象的查询语言,几乎可以实现类似关系数据库表单查询的绝大部分功能,而且支持对数据库建立索引。
特点:
- 高性能
- 易部署
- 易使用
配置MongoDB的方法如下链接,这里不再过多赘述,装完之后建议再装一个可视化工具,否则不易观察数据库状态
使用express利用graphql访问mongodb操作数据
环境(版本一定要匹配):
node -v //v16.20.1
"dependencies": {
"express": "^4.16.4",
"express-graphql": "^0.7.1",
"graphql": "^14.0.2",
"mongoose": "^6.5.0"
}
注意: node的版本一定一定要和graphql版本以及mongoose的版本要适配,否则后续无法进行
node的版本不要太高,我刚开始使用的是18.x版本,后来发现与mongoose不匹配,又开始对node降级到16.20
配置
装好MongoDB之后以管理员身份运行net start MongoDB,启动数据库,打开localhost: 27017如果可以成功访问,说明mongodb服务已经成功启动。
安装好以上版本之后,新建一个js文件:
const express = require('express')
const {
buildSchema} = require('graphql')
const graphqlHttp = require('express-graphql')
// 连接数据库服务
const mongoose = require('mongoose')
mongoose.connect("mongodb://localhost:27017/test")
//设置Schema
const schema = buildSchema(`
type Person{
name: String,
age: Int,
id: String
}
type Query{
getList: [Person],
hello:String
}
input TempInput{
name: String,
age: Int,
}
type Mutation{
createPerson(input: TempInput):Person,
updatePerson(id:String!,input:TempInput):Person,
deletePerson(id: String!): Int
}
`)
//定义模型: 限制数据库films集合的只能存几个字段
var PersonModel = mongoose.model('person',new mongoose.Schema({
name: String,
age: Number
}))
const root = {
createPerson({
input}){
return PersonModel.create({
...input})
},
getList(){
return PersonModel