You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.5 KiB
TypeScript

import { ApolloServer } from 'apollo-server-express'
import bikeresolver from './resolvers/cargobikeResolver'
import { CargoBikeAPI } from './datasources/db/cargobikeAPI'
import typeDefs from './schema/type-defs'
import 'reflect-metadata'
import { createConnection } from 'typeorm'
import { UserServerAPI } from './datasources/userserver/userserviceAPI'
import express from 'express'
require('dotenv').config()
async function authenticate (req: any, res: any, next: any) {
if (process.env.NODE_ENV === 'develop') {
next()
} else {
const token = req.headers.authorization?.replace('Bearer ', '')
if (token) {
if (await userAPI.validateToken(token)) {
next()
} else {
res.status(401)
res.send('Unauthorized')
}
} else {
res.status(401)
res.send('Unauthorized')
}
}
}
createConnection().then(async () => {
console.log('connected to db')
}).catch(error => console.log(error))
4 years ago
const userAPI = new UserServerAPI(process.env.RPC_HOST)
const server = new ApolloServer({
resolvers: [bikeresolver],
typeDefs,
dataSources: () => ({
cargoBikeAPI: new CargoBikeAPI(),
userAPI
})
})
4 years ago
const app = express()
app.post('/graphql', authenticate)
app.get(/\/graphql?&.*query=/, authenticate)
server.applyMiddleware({ app })
console.log(__dirname)
app.listen(4000, () => {
console.log('Server listening on port 4000')
})