@hgraph/server
v1.0.2
Published
You can spin off a service to serve a REST or GraphQL endpoint
Downloads
7
Readme
Hypergraph Server
With the help of this package you can spin off a service to serve a REST or GraphQL endpoint
Install
Using npm:
npm install @hgraph/server
Using yarn:
yarn add @hgraph/server
Usage
Setup a service
mkdir my-service
cd my-service
yarn init -y
Setup src/index.ts
import 'reflect-metadata'
import { initializeGraphqlServer } from 'hypergraph-graphql'
import { bootstrapServer, createMiddleware } from '@hgraph/server'
import { createSchema } from './schema'
async function run() {
await bootstrapServer({
port: 4000,
apiRoot: '/api',
controllers: [`${__dirname}/**/*-controller.ts`],
})
}
void run()
Add controller
import { Controller, Get } from '@hgraph/server'
@Controller('/user')
export class UserController {
@Get('/me')
async findCurrentUser() {
return { user: null } // your logic
}
}
Start the service
npx ts-node src/index.ts
This will expose a GET url http://localhost:4000/api/user/me
[2023-06-29T16:43:35.723] [INFO ] [TSED] - Injector created... +3ms
[2023-06-29T16:43:35.723] [INFO ] [TSED] - Build providers +0ms
[2023-06-29T16:43:35.734] [INFO ] [TSED] - Settings and injector loaded... +11ms
[2023-06-29T16:43:35.736] [INFO ] [TSED] - Load routes +2ms
[2023-06-29T16:43:35.736] [INFO ] [TSED] - Routes mounted... +0ms
[2023-06-29T16:43:35.737] [INFO ] [TSED] -
┌───────────────┬──────────────┬──────────────────────────────────┐
│ Method │ Endpoint │ Class method │
│───────────────│──────────────│──────────────────────────────────│
│ GET │ /api/user/me │ UserController.findCurrentUser() │
└───────────────┴──────────────┴──────────────────────────────────┘
[2023-06-29T16:43:35.738] [INFO ] [TSED] - Listen server on http://0.0.0.0:4001
[2023-06-29T16:43:35.738] [INFO ] [TSED] - Started in 18 ms +2ms
Adding GraphQL
Create src/schema.ts
import { createGraphqlSchema, referenceResolver } from 'hypergraph-graphql'
export async function createSchema() {
return await createGraphqlSchema({
resolvers: [`${__dirname}/**/*-resolver.ts`],
referenceResolvers: {
// User: referenceResolver(UserRepository),
},
authChecker: () => true,
})
}
Modify src/index.ts
async function run() {
const schema = await createSchema()
const router = initializeGraphqlServer({ schema })
await bootstrapServer({
port: 4000,
apiRoot: '/api',
controllers: [`${__dirname}/**/*-controller.ts`],
middlewares: [createMiddleware(router)],
})
}
Create a user schema by adding src/schema/user/user-schema.ts
import { Field, ObjectType } from 'type-graphql'
import { Repository } from 'hypergraph-storage'
@ObjectType()
export class User {
@Field()
id!: string
@Field()
name?: string
}
Add resolver src/resolver/user/user-resolver.ts
import { Query, Resolver } from 'type-graphql'
import { User } from '../../schema/user/user'
@Resolver()
export class UserResolver {
@Query(() => User, { nullable: true })
me() {
return null
}
}
Now start the service. This will expose a new endpoint http://localhost:4000/graphql