SimfinityJS is a Node.js framework that allows bringing all the power and flexibility of MongoDB query language to GraphQL interfaces.
In pure GraphQL, you have to define every query and mutation. With SimfinityJS you define the object model, and the framework itself interprets all queries and mutations. SimfinityJS acts as a glue. It translates GraphQL to MongoDB and viceversa.
As a result, developers can focus on model structure and object relationships.
- Translation between GraphQL and MongoDB and viceversa
- Implement business logic in a declarative way
- Implement domain validations in a declarative way.
- Supports declarative state machine. Business logic can be included in each state transition.
- Powerful semantic API. Basically, any query that can be executed in mongocli can be executed in GraphQL, thanks to SimfinityJS.
npm install @simtlix/simfinity-js --save
const express = require('express')
const graphqlHTTP = require('express-graphql')
const simfinity = require('@simtlix/simfinity-js')
const app = express()
const mongoose = require('mongoose')
//Replace with your Mongo DB connection string
mongoose.connect('mongodb://localhost:27017,localhost:27018,localhost:27019/example2', { replicaSet: 'rs', useNewUrlParser: true, useUnifiedTopology: true })
mongoose.connection.once('open', () => {
console.log('connected to database')
})
mongoose.set('debug', true);
const type = require('./types')
const includedTypes = [type.Book]
const schema = simfinity.createSchema(includedTypes)
app.use('/graphql', graphqlHTTP({
// Directing express-graphql to use this schema to map out the graph
schema,
/* Directing express-graphql to use graphiql when goto '/graphql' address in the browser
which provides an interface to make GraphQl queries */
graphiql: true,
formatError: simfinity.buildErrorFormatter((err) => {
console.log(err)
})
}))
app.listen(3000, () => {
console.log('Listening on port 3000')
})
const graphql = require('graphql')
const simfinity = require('@simtlix/simfinity-js')
const {
GraphQLObjectType,GraphQLString,
GraphQLID, GraphQLInt
} = graphql
const BookType = new GraphQLObjectType({
name: 'Book',
fields: () => ({
id: {
type: GraphQLID
},
name: { type: GraphQLString },
pages: { type: GraphQLInt }
})
})
module.exports = BookType
simfinity.connect(null, BookType, 'book', 'books', null, null, null)
Start replica set
run-rs
Run the application
node app.js
Open http://localhost:3000/graphql endpoint defined on app.js
Create a book
mutation {
addbook (
input:{
name: "Hello World Book",
pages: 333
}
)
}
List all books
query {
books {
id, name, pages
}
}
Visit the samples site and learn about SimfinityJS through different use cases