Express、GraphQL以及MongoDB使用和访问数据

​ Express、GraphQL以及MongoDB使用和访问数据
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值